여기 어떤 파생 클래스 또는 객체에 의해 호출을 허용, 액세스처럼 "보호"제공에 대한 접근 방식이다.
struct A
{
protected:
//Zero sized struct which allows only derived classes to call privileged methods
struct DerivedOnlyAccessToken{};
public: //public in the normal sense :
void foo() {}
public: //For derived types only :
void privilegedStuff(DerivedOnlyAccessToken aKey);
};
struct B: A
{
void doPrivelegedStuff(A& a)
{
//Can create a token here
a.privilegedStuff(DerivedOnlyAccessToken());
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.foo();
a.privilegedStuff(A::DerivedOnlyAccessToken()); // compile error.
B b;
b.doPrivelegedStuff(a);
return 0;
}
이 내 생각이 아니다 : 그것은 유엔 - 잠금 특권 방법에 필요한 보호 토큰 유형을 사용합니다. 나는 그것을 어떤 곳에서 읽었다. 나는 그것이 교활한 생각 인 사람을 기억하지 못한다.
컴파일러가 aKey 매개 변수를 삭제할 수 있다고 예상합니다.
왜'B :: bar'는'A :: foo'를 호출해야합니까? 'A :: foo'가 보호된다면, 그것은'A' 타입의 객체와'A'에서 파생 된 타입 만이 그것을 호출 할 수 있어야한다는 것을 의미합니다. 무관 한 클래스에서'A :: foo'를 실제로 호출해야한다면 아마 보호되어서는 안됩니다. –
그리고 무엇이 문제입니까? –
'B'가'A'의 타입 일 때'B'에'A' 인스턴스를 넘기는 이유는 무엇입니까? – birryree