cpp中友元的传递性

c++中的友元不具有传递性

  • 老子的朋友是老子的朋友,儿子的朋友是儿子的朋友
class Base
{
    friend class F;//1
protected:
    int a;
};
class Extend : public Base
{
    friend class F;//2
protected:
    int b;
};
class F
{
    Base b;
    Extend e;
    void f()
    {
        b.a;//1.处不声明此处是错误的
        e.b;//2.处不声明此处是错误的
        e.a;//2.处不声明此处是错误的
    }
};
  • 你是我的朋友,他是我的朋友,但你不是他的朋友
class ni
{
//不能访问ta的成员
};
class wo
{
    friend class ni;
};
class ta
{
    friend class wo;
};
  • 要想是两个类互为友元必须在两个类中都要声明对方。

你可能感兴趣的:(cpp中友元的传递性)