상수 데이터 멤버 사용 및 초기화
우리는 C 언어를 배울 때 이미 상수 의 개념을 알고 있습니다. 소위 "상수", 즉 "상수"로 수정된 변수는 변경할 수 없습니다. 이 값은 변경할 수 없습니다.
C++에는 상수라는 개념도 있습니다. 추가적인 차이점은 일반 변수를 상수 변수로 수정하는 것 외에도 const를 사용하여 객체를 수정하고 상수 객체로 바꿀 수 있다는 것입니다. 그리고 클래스를 수정할 수 있는 데이터 멤버와 멤버 함수를 각각 클래스의 상수 데이터 멤버와 상수 멤버 함수라고 합니다.
다음으로 상수 데이터 멤버 , 상수 멤버 함수 , 상수 객체를 순서대로 설명하겠습니다.
1. 상수 데이터 멤버:
상수 데이터 멤버의 사용법은 데이터의 이 부분이 클래스에 나타나고 사용되는 형식이 다음과 같다는 점을 제외하면 C 언어의 사용법과 동일합니다.
데이터 유형 const 데이터 멤버 이름;
또는
const 데이터 유형 데이터 멤버 이름;
const로 수정된 멤버는 초기화되어야 하며 변경할 수 없으며, 초기화 방법은 클래스 생성자의 초기화 목록에서 수행됩니다.
또한, 특별한 경우가 있는데, 멤버가 정적 유형, 즉 정적 상수 데이터 멤버 인 경우 정적 특성이므로 초기화를 클래스 외부에서 초기화해야 합니다. 방금 언급한 상황을 코드에 넣어 설명하겠습니다.
#include<iostream>usingnamespacestd;classClock{private:constinth;//h를 상수 유형 멤버로 수정 constintm;//m을 상수 유형 멤버로 수정 intconsts;//위 두 가지 사용법 모두 사용할 수 있습니다 staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
데모 결과를 실행합니다:
클래스의 네 가지 상수 데이터 멤버에 주의하세요. 그 중 X는 특수한 정적 속성으로 인해 X가 비공개 유형이더라도 클래스 외부에서 초기화되어야 합니다.
2. 상수 개체:
C++에서는 객체를 const 유형, 즉 상수 객체로 선언할 수 있습니다. 이 선언 이후에는 전체 라이프 사이클 동안 객체를 변경할 수 없으므로 정의 시 생성자에 의해 초기화되어야 합니다.
const 객체 이름을 입력하세요.
또는
const 유형 객체 이름;
상수 개체는 클래스의 비멤버 함수에 액세스할 수 없지만 상수 멤버 함수(아래 3부)에만 액세스할 수 있다는 점에 유의해야 합니다. 아래 예를 살펴보겠습니다.
#include<iostream>usingnamespacestd;classClock{private:constinth;//h를 상수 유형 멤버로 수정 constintm;//m을 상수 유형 멤버로 수정 intconsts;//위 두 가지 사용법 모두 가능합니다 intx;public: 시계(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
코드의 39행과 40행에 있는 문에 주의하세요. A는 상수 개체이고 값을 할당할 수 없고 ShowTime 함수는 비멤버 함수이기 때문에 일반 컴파일에서는 오류가 보고됩니다. 41줄의 코드를 실행할 수 있으며 그 효과는 다음과 같습니다.
3. 상수 멤버 함수:
마찬가지로 클래스의 멤버 함수는 const에 의해 수정된 후 상수 멤버 함수가 됩니다. 상수 멤버 함수의 정의는 다음과 같습니다.
반환형 함수명(파라미터 목록 열) const;
주의해야 할 사항:
(1) 상수 멤버 함수의 정의와 선언에는 const가 포함되어야 합니다.
(2) 상수 멤버 함수는 상수 멤버 함수만 호출할 수 있고, 특별 멤버 함수는 호출할 수 없으며, 특별 멤버 변수에 접근할 수는 없지만 변경할 수는 없습니다.
예를 들어 다음 코드는 다음과 같습니다.
#include<iostream>usingnamespacestd;classClock{private:constinth;//h를 상수 유형 멤버로 수정 constintm;//m을 상수 유형 멤버로 수정 intconsts;//위 두 가지 사용법 모두 가능합니다 intx;public: 시계(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);A .GetX();return0;}
29번째와 30번째 코드 라인에 주의하세요. 29번째 코드 라인을 사용하면 실제 실행 효과는 다음과 같습니다.
C++에서 상수 개념의 확립은 프로그램 내 각 개체의 변경과 불변성 사이의 경계를 명확하게 하고 C++ 프로그램의 안전성과 제어 가능성을 향상시킵니다.
직접 사용해 보시기 바랍니다.