멤버함수 뒤 const

rasungboy의 이미지

저는 멤버함수에 const 를 붙여주면

그 멤버함수는 멤버 데이타를 변경하지 않는다 라는걸 나타내는것 이라는것

외에는 다른뜻은 몰랐는데... 오늘 이런 현상을 체험햇씁니당

class Buffer{};

class a
{
public:
  Buffer* GetBuffer();

private:
  Buffer* m_Buffer;
};

class b : public a
{
  void DoSomething() const;
};

void b::DoSomething() const
{
  GetBuffer();
}

이렇게 DoSomething() 에 const를 붙이고
부모의 퍼블릭 메소드를 호출했는데 에러가 나더군요.
컴파일 에러가 납니다.
에러메세지는 대략
cannot convert 'this' pointer from 'const b' to 'a&'
입니다.

단순히 const 가 멤버변경을 못하게 한다는것만 알고 잇었는데
뭐가 문제인지 궁금합니다

myueho의 이미지

const 멤버 함수 안에서는 const가 아닌 멤버함수를 호출할 수 없습니다.
const가 아닌 멤버함수안에서 멤버변수를 수정할 수 있기 때문입니다.

doldori의 이미지

멤버함수 선언 끝에 붙는 const는 this 포인터를 통해 개체를 변경할 수
없다는 뜻입니다. 그런데 b::DoSomething() const 내부에서 (개체가 변경
가능한) GetBuffer()를 호출했기 때문에 나는 에러입니다.

Buffer* a::GetBuffer() const;

로 선언하세요.