const 멤버 함수는 객체가 const일 때 호출 가능하게 만들어주기 위해 있습니다.
에러가 나는 상황
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
class Person {
char * name;
public:
Person(const char * strName) {
name = new char[strlen(strName) + 1];
strncpy(name, strName, strlen(strName)+1);
}
~Person() {
delete[] name;
}
void Print() {
std::cout << name;
}
};
int main(void) {
const Person per("asd");
per.Print();
}
객체가 const인데 객체 생성 이후로 Print 멤버 함수를 호출하고 있습니다.
근데 이 줄에서 에러가 발생하게 되는데, 변경하면 안 되는 호출 객체를 Print 멤버 함수가 값을 수정하지 않는다는 보장이 없기 때문입니다.
해결 방안
void Print() const {
std::cout << name;
}
함수 괄호 뒤에 const 키워드를 넣어주면 됩니다.
그러면 객체가 const여도 호출 가능한 멤버 함수가 됩니다.
이때 const 멤버 함수에 주의할 점은 포인터의 경우 가지고 있는 주소값만 체크하지 해당 메모리의 값까진 체크하지 않습니다.
댓글