“友谊”如何为派生类工作?

时间:2013-08-14 13:04:37

标签: c++

有三个类:

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是受保护的成员。

请解释我为什么会这样。

我可以使用基类的“友谊”访问受保护的成员吗?

1 个答案:

答案 0 :(得分:5)

友谊不是继承的。如果您希望B_Impl成为A的朋友,则必须将B_Impl声明为朋友。

友谊也不是传递性的:你朋友的朋友不一定是你的朋友。