본문 바로가기

Language/C++

const 멤버 함수

cosnt 멤버 함수

const 멤버 함수는 2가지의 특별한 특징을 갖는다.
1.멤버 변수의 값 변경을 허용하지 않는다.
2.멤버 변수 값의 변경에 대한 기회제공도 불가능 하다.

아래 구문은 에러를 이르키는 구문이며 에러 부분에 주석처리된 코드를 넣으면 해결이 가능하다.
class Count
{
    Count() : cnt{0}//간접적으로 멤버변수를 조작할수 있는 동기를 부여하기 때문에 에러가 난다.
    int* GetPtr() const//const int* Getptr() const //const를 맨 압에 붙이게 되면 포인터가 가리키는 대상가지 상수화 시켜버린다. 접근은 가능하지만 변경은 불가능하다.
    {
        return &nct;//compile Error
    }
    void increment()
    {
        cnt++;
    }
    void ShowData() const
    {
        ShowIntro(); //Compile Error
    }
    void Showintro()//void Showintro() const  //서로간의 상수화가 되면 에러를 발생시키지 않는다.
    {
        cout<<"현재 count의 값 : "<<endl;
    }
};

int main()
{
    Count count;
    count.increment();
    count.ShowData();
}

값이 변경 되는가, 얼마로 변경 되는가 에 대한 판단은 compile time 이 아닌 run time 에서 일어 나며, complie이 run tiem 보다 먼저
일어나기 때문에 에러가 발생하는 것이다. 즉 compile time 에는 상수가 됐는지 않됐는지만 판단한다.

덧붙여 말하자면 함수 오버로딩을 할때 요구조건으로 const를 사용할수 있다.