有三个类:
class A
{
friend I_B;
protected:
void* mData;
};
class I_B
{
void foo() = 0;
};
class B_Impl : public I_B
{
B_Impl( A* value )
:
mData( value->mData ) <--- ERROR
{
}
void foo() { mData->DoSomething() };
protected:
void* mData;
};
在编译时,我在构造函数中遇到错误,mData是受保护的成员。
请解释我为什么会这样。
我可以使用基类的“友谊”访问受保护的成员吗?
答案 0 :(得分:5)
友谊不是继承的。如果您希望B_Impl
成为A
的朋友,则必须将B_Impl
声明为朋友。
友谊也不是传递性的:你朋友的朋友不一定是你的朋友。