我遇到了this未回答的问题,实在令人费解。这种行为应该有意义吗?它在标准中吗?这是个问题:
class parentFriend;
class parent
{
friend class parentFriend;
public: void f1(){};
protected: void f2(){};
private: void f3(){};
};
class childpub: public parent {};
class childprot: protected parent {};
class childprv: private parent {};
class parentFriend
{
public:
void f()
{
/* which of the following statements will compile? why? why not?*/
parent p; p.f1(); p.f2(); p.f3(); // these will compile
childpub cpub; cpub.f1(); cpub.f2(); cpub.f3();
childprot cprot; cprot.f1(); cprot.f2();
cprot.f3(); // does not compile
childprv cprv;
cprv.f1(); // does not compile
cprv.f2(); // does not compile
cprv.f3(); // does not compile
}
};
答案 0 :(得分:1)
根据我的理解阅读您发布的链接(另请参阅相同的问题here并附上一些答案),原始问题的作者对gcc编译器的行为感到惊讶(来自2009年的线程,gcc版本4.0.1在线程中提到的,这行没有错误编译,而它不应该有:
childprot cprot; cprot.f1(); cprot.f2(); // (2)
我尝试使用MSVC 2010的代码并且这行不能编译,友谊不会按照标准的预期继承。