플로렌스라는 개발자

프로그래밍/C++ 2019.10.15 댓글 0 Plorence

C++ const 멤버 함수

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 멤버 함수에 주의할 점은 포인터의 경우 가지고 있는 주소값만 체크하지 해당 메모리의 값까진 체크하지 않습니다.