상수함수는 멤버변수에 값을 입력 시킬 수 없으며, 다른 상수함수만을 사용할 수 있는 함수 입니다.
즉, 반대로 말하면 멤버변수가 아닌 다른 변수는 입력 가능하며, 일반 함수는 사용할 수 없는 함수 입니다.
예를 들면서 설명을 하면,
위에서 void cGet(int value) const 함수에서
멤버 변수로 되어 있는 value에 매개 변수로 입력 된 value 값을 입력 시킬려는
작업을 하였습니다.
하지만 상수함수에서는 멤버 변수에 값을 넣을 수 없기 때문에
error C2166 : l-value specifies const object(l-value가 상수 개체를 지정합니다.)
라는 메세지가 나오면서 에러가 뜨게 됩니다.
그럼 멤버 변수 이외의 변수에는 넣을 수 있는걸 보면,
에러 없이 잘 컴파일 및 실행이 됩니다.
그 이유는 int mvalue; 를 새로 선언을 해 주었기 때문에 상수함수의 멤버변수가 아닌
새로운 지역 변수로 선언을 한 것으로 상수함수에서 멤버변수가 아니기 때문에 에러를
내지 않습니다.
그리고 상수함수에서 상수함수를 부를 경우와 일반 함수를 부를 경우를 보면,
일반함수 사용하였을 경우
error C2662: 'Set' : cannot convert 'this' pointer from 'const class Test' to 'class Test &'
('this' 포인터를 'const class Test'에서 'class Test&'(으)로 변환할 수 없습니다.)
이런 식으로 에러가 나게 됩니다.
하지만 상수함수를 사용하였을 경우에는 컴파일 및 실행이 잘 되었습니다.
그래서 이런 이점을 이용하여 상수함수를 사용하면 좋은 프로그래밍을 할 수 있을 것입니다.
참, 한마디를 더 하자면,
const int Set(const int value);
이런식으로 선언을 한 함수는 상수 함수가 아니라
리턴값과 매개변수값을 상수화 시키겠다는 것입니다.
이 함수를 상수함수 안에서 사용을 하면,
일반 함수로 된다는 걸 잊지 마시길 바랍니다.
'C++ Language > Tip / Information' 카테고리의 다른 글
const_cast 키워드 (0) | 2010.02.12 |
---|---|
mutable 키워드 (0) | 2010.02.12 |
explicit 키워드 (0) | 2010.02.10 |
C++ 코딩 스타일(제가 사용하는 코딩 스타일입니다.) (0) | 2009.04.29 |
C++언어가 C언어와 달라진 점 (1) | 2009.04.29 |