복사 생성자에서 private 맴버 접근?

Geniys의 이미지

복사 생성자에서 복사하려는 원본에서 변수를 가져올때 get함수를 만들어서 사용했더니 에러가 발생하더군요.

그런데 private여서 당연히 함수로 불러와야 될줄알았는데...
그저 "객체.name"으로도 접근이 가능하던데,
그렇다면 private 의 접근 권한에 위배된것이 아닌가요?

아래에서 origin과 old_origin 모두 private 입니다.

Region::Region(const Region& in)
{
	origin = in.origin;
	old_origin = in.old_origin;
}

만약 함수를 사용하면,

Region::Region(const Region& in)
{
	Image tmp = in.get_region_image(); //이부분
	origin = in.origin;
	old_origin = in.old_origin;
}

다음과 같은 에러가 발생합니다.
E:\@ing\VS6\Algo_RPT\Region.cpp(32) : error C2662: 'get_region_image' : cannot convert 'this' pointer from 'const class Region' to 'class Region &'
Conversion loses qualifiers

솔직히 에러도 잘 이해가 되지 않습니다.

이런 이유를 알고 싶습니다.

익명사용자의 이미지

private 접근 제한은 오브젝트 단위가 아니라 클래스 단위입니다. 같은 클래스에 속하기만 한다면 다른 오브젝트의 private 멤버에 접근할 수 있습니다.
그리고 get_region_image() 에 const 선언이 되어 있어야 합니다. 그렇지 않으면 const Region& in 에 대해 호출할 수 없습니다. (Region& in 라면 호출할 수 있겠지요). const 성질을 보장하기 위한 제한입니다.