const 멤버함수
클래스의 멤버함수가 멤버변수의 값을 수정하는 것을 방지 하기위해 쓰인다.
또한 멤버함수는 상수화된 멤버함수가 아닌 함수를 호출 할 수 없으며, 멤버변수의 포인터를 리턴하는 것 또한 불가능하다.
형태는 위와 같으며, 이는 const 멤버함수가 멤버변수를 조작하는 것을 방지 하기 위함인데 예를들어 상수화 되지 않은 멤버함수가 멤버변수를 조작 할 수 있는데 호출 하는 경우나, 리턴된 멤버변수의 포인터가 가리키는 데이터를 조작 할 수 있기 때문이다.
그렇기 때문에 const 멤버함수에서 다른 함수를 호출 하기 위해서는 그 함수 또한 const를 통해 상수화 하여야 한다.
또 포인터를 리턴하기 위해서는 위 처럼 const를 앞에 붙여 리턴형 또한 상수화 시켜서 멤버변수를 수정하지 못하도록 해야 한다.
const 객체와 오버로딩
객체 또한 const를 통해 상수화가 가능하며, 상수화된 클래스의 경우 어떤 방법으로도 멤버 변수를 조작이 불가능하다.
또한 멤버함수가 const를 통해 상수화 된 멤버 함수가 아니면 멤버변수를 조작하는 함수가 아니더라도 호출이 불가능 하다.
또 위와 같이 상수화 된 멤버 함수와 일반 멤버 함수를 통해 객체가 상수냐 아니냐 따른 함수 오버로딩 또한 가능하다.
재밌는 점은 const 객체의 경우 상수화 된 멤버함수가 아니면 호출을 할 수 없기때문에 만약에 두 함수 중 const 멤버 함수가 없다면 p2의 ShowData함수를 호출 할 수 없어 에러를 발생한다.
하지만 const 멤버 함수만 있는경우는 두 경우 다 const 멤버 함수를 호출이 가능해서 다음과 같은 결과가 나온다.
'Programming > C/C++' 카테고리의 다른 글
클래스와 static (0) | 2015.01.15 |
---|---|
복사생성자와 얕은복사 (0) | 2015.01.15 |
friend 선언 (0) | 2015.01.14 |
class의 정보은닉과 캡슐화 (0) | 2015.01.13 |
reference와 pointer의 차이 (0) | 2015.01.13 |