int GetX() const;

int GetY() const;

void ShowRecInfo() const;

 

위에 선언된 const의 경우 "이 함수 내에서는 멤버변수에 지정된 값을 변경하지 않겠다"는 의미이다.

따라서 const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되면, 컴파일 에러가 발생한다. 따라서 이는 프로그래머의 실수를 최소화하기 위한 매우 의미 있는 선언이다. 

 

class SimpleClass
{
	private:
    	int num;
    
    public:
    	void InitNum(int n)
        {
			num = n;
        }
        
        int GetNum() // const 선언이 추가되어야 아래의 컴파일 에러 소멸
        {
        	return num;
        }
        
        void ShowNum() const
        {
        	cout << GetNum() << endl; // 컴파일 에러 발생
        }
};

 

위 클래스 정의에서 ShowNum 함수는 const 함수로 선언되었다. 그리고 실제로 함수 내에서는 멤버변수 num의 값을 변경하지 않는다. 그럼에도 불구하고 GetNum 함수를 호출하는 문장에서 컴파일 에러가 발생한다.

 

그 이유는 const 함수 내에서는 const가 아닌 함수의 호출이 제한되기 때문이다.

 

C++에서는 const 참조자를 대상으로 값의 변경 능력을 가진 함수의 호출을 허용하지 않는다. (실제 값의 변경여부에 상관이 없음). 따라서 const 참조자를 이용해서는 const 함수만 호출이 가능하다.

 

Reference


[1] 윤성우의 열혈 C++ 프로그래밍

+ Recent posts