const 멤버함수
멤버함수에 const 키워드를 붙여주는것은,
=> "멤버 함수를 상수화 하겠다."는 뜻.
멤버 함수가 상수화 되면, 이 함수를 통해서 멤버 변수의 값이 변경되는 것을 허용하지 않는다.!
멤버 변수의 포인터를 리턴하는 것도 허용하지 않는다.
해결책!!!
컴파일 오류는 NO!
const객체
객체가 상수화되면,
어떠한 경로를 통해서든, 멤버 변수의 조작은 불가능.
상수화된 멤버 함수만 호출 가능.
일반 멤버함수는 멤버 변수를 조작하지 않더라도 호출 불가능!!
ShowData() 함수는 num을 조작하지 않고 단지 보여주는 역할만 한다.
ShowData()함수를 사용하고 싶을 때 => ShowData()를 상수화!
멤버함수에 const 키워드를 붙여주는것은,
=> "멤버 함수를 상수화 하겠다."는 뜻.
멤버 함수가 상수화 되면, 이 함수를 통해서 멤버 변수의 값이 변경되는 것을 허용하지 않는다.!
int* GetPtr() const{
return &cnt;
} //컴파일 요류
상수화된 함수는 상수화되지 않은 함수의 호출을 허용하지 않을 뿐만 아니라, return &cnt;
} //컴파일 요류
멤버 변수의 포인터를 리턴하는 것도 허용하지 않는다.
해결책!!!
const int* GetPtr() const{
return &cnt;
}
=>리턴하고자 하는 포인터를 상수화해서 리턴. 포인터 자체를 상수화하는 것이 아니라, 포인터가 가리키는 데이터를 상수화는것. 따라서 이 포인터를 전달받은 영역에서는 멤버 변수를 참조할 수는 있어도 조작하는 것은 불가능.return &cnt;
}
컴파일 오류는 NO!
const객체
객체가 상수화되면,
어떠한 경로를 통해서든, 멤버 변수의 조작은 불가능.
상수화된 멤버 함수만 호출 가능.
일반 멤버함수는 멤버 변수를 조작하지 않더라도 호출 불가능!!
#include <iostream> class AAA int main(void) return 0; |
ShowData() 함수는 num을 조작하지 않고 단지 보여주는 역할만 한다.
ShowData()함수를 사용하고 싶을 때 => ShowData()를 상수화!
@@@ 상수함수냐 아니냐에 따라서도 함수 오버로딩은 성립! @@@
void function(int n) const {......}
void function(int n) {.....}
void function(int n) const {......}
void function(int n) {.....}
#include <iostream> class AAA int main(void) return 0; |
'Language > C++' 카테고리의 다른 글
키워드 explicit & mutable (0) | 2011.03.07 |
---|---|
static 멤버변수 / 멤버함수(클래스 변수, 클래스 함수) (0) | 2011.03.07 |
멤버 이니셜라이저의 필요성 _const 멤버 변수를 초기화 (0) | 2011.03.07 |
복사생성자가 호출되는 시점 (0) | 2011.03.07 |
깊은 복사(Deep Copy) ..(const Person& p) 명시적 정의 (0) | 2011.03.07 |