[C++] const

Programming/C++ Language 2010. 3. 19. 14:46
const 함수를 선언/정의 할 때는 아래와 같이 한다.

int getHour() const;
int Time::getHour() const
{
}

아래는 상수 함수와 비상수 함수에서의 상수/비상수 멤버함수를 호출하는 예를 보여준다.

Time wakeUp();
const Time noon();

wakeUp.setHour( 10 );
noon.setHour( 10 );

wekeUp.getHour();
noon.getHour();

wakeUp.printStandard();
noon.printStandard();

위에서 set/print 함수는 비상수 함수이고, get 함수는 상수 함수임을 먼저 알린다.
빨간 부분으로 되어 있는 부분에 컴파일 에러가 생기게 된다. 이유는, 비상수 객체에서는 상수/비상수 함수를 모두 호출 시킬수 있는 반면에, 상수 객체에서는 비상수 함수를 일체 사용할 수 없기 때문에 에러가 뜨고, 실제로 printStandard 함수에서 값을 변경하지 않더라도 확실하게 값을 변화시키지 않는다고 보장을 하지 못하기 때문에 컴파일 에러를 발생한다.


class Increment{
private:
int count;
const int increment;
}

Increment::Increment( int c, int i ) : count( c ), increment( i )
{
}

const 데이터 멤버와 참조되는 데이터 멤버는 멤버 초기값 구문을 사용하여 초기화 하여야 한다. const 변수를 Increment 생성자 스코프 안에서는 초기화를 할 수 없다. 위와 같이 초기화를 하면 생성자 본체 시작전에 선언과 동시에 초기화를 하게 된다.
그리고, Increment 의 부모 클래스가 있는 경우, 부모 클래스의 생성자가 수행되기 전에 멤버 초기값 구문이 실행된다.

'Programming > C++ Language' 카테고리의 다른 글

[C++] Construct method  (0) 2010.05.27
[C++] static_cast  (0) 2010.03.22
[C++] 다양한 생성자 초기화 방법  (0) 2010.03.19
static 클래스 멤버  (0) 2010.03.19
namespace  (0) 2010.03.19

설정

트랙백

댓글