글
[C++] const
Programming/C++ Language
2010. 3. 19. 14:46
const 함수를 선언/정의 할 때는 아래와 같이 한다.
아래는 상수 함수와 비상수 함수에서의 상수/비상수 멤버함수를 호출하는 예를 보여준다.
위에서 set/print 함수는 비상수 함수이고, get 함수는 상수 함수임을 먼저 알린다.
빨간 부분으로 되어 있는 부분에 컴파일 에러가 생기게 된다. 이유는, 비상수 객체에서는 상수/비상수 함수를 모두 호출 시킬수 있는 반면에, 상수 객체에서는 비상수 함수를 일체 사용할 수 없기 때문에 에러가 뜨고, 실제로 printStandard 함수에서 값을 변경하지 않더라도 확실하게 값을 변화시키지 않는다고 보장을 하지 못하기 때문에 컴파일 에러를 발생한다.
class Increment{
private:
Increment::Increment( int c, int i ) : count( c ), increment( i )
{
}
const 데이터 멤버와 참조되는 데이터 멤버는 멤버 초기값 구문을 사용하여 초기화 하여야 한다. const 변수를 Increment 생성자 스코프 안에서는 초기화를 할 수 없다. 위와 같이 초기화를 하면 생성자 본체 시작전에 선언과 동시에 초기화를 하게 된다.
그리고, Increment 의 부모 클래스가 있는 경우, 부모 클래스의 생성자가 수행되기 전에 멤버 초기값 구문이 실행된다.
int getHour() const;
int Time::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();
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 |