2012-05-05 3 views

답변

6

클래스의 인스턴스에 할당 할 공간을 컴파일러가 어떻게 알 수 있습니까? 이 foo를 할당 할 때

A foo; 
protected int A::var; 
A bar; 

어떻게 컴파일러는 var을위한 공간을 할당하는 알 것 고려? 첫 번째와 두 번째 줄은 다른 번역 단위 일 수도 있습니다.

아니, 불가능하지 않기 때문에 불가능합니다.

+0

+1 좋은 점. – greg

6

간단히 말해서, 불가능합니다.

복잡한 단어로, 표준에서는 키워드 및 액세스 지정자 protected을 클래스 정의 내에서만 사용할 수 있기 때문에 가능하지 않습니다.

0

가 할 수있는 방법은 없습니다 정확히 당신이 원하는 무엇을 (다른 사람이 말했듯이),하지만 당신은 당신의 클래스의 사용자에게 protected/private 멤버를 공개하지 않으려면이 주위에 "해킹"이 있습니다. PrivateBasePublicBase 클래스를 만든 다음 두 개의 이전 클래스의 다중 상속 또는 구성을 사용하는 세 번째 클래스를 만들 수 있습니다. 일반적으로 헤더 파일을 배포하려고하지만 모든 비공개 멤버를 공개하고 싶지 않기 때문에이 작업이 수행됩니다.

Here is an example 등이있다. Scott Meyers도 자신의 저서 중 하나에 모범을 보였습니다. 그것은 훨씬 더 많은 작업이며 훨씬 더 복잡한 유지 보수를 목적으로합니다.