阶级友谊 - 一个难题

时间:2013-01-17 12:19:42

标签: c++ class inheritance friend access-control

我是初学者级别的面向对象编程爱好者。我遇到了以下难题:

class A { 
}; 

class B { 
protected: 
    friend class A; 
};

class C { 
public: 
    friend class B; 
};

参考上面的示例代码,假设上面的类有数据成员,C的成员可以在A成员的声明中使用什么名称?

  1. 仅限私人会员

  2. 仅受保护的成员

  3. 所有C的数据成员

  4. 仅限公众成员

  5. C的数据成员*

  6. 我的选择是回答4因为友谊不是传递性的。因此,A是B的朋友,但A不是C的朋友(即使B是C的朋友)。 这是正确的想法吗?

    另外,我的问题是到目前为止(在教程中)我遇到了友情被宣布为这样的exmaples:

    class X { 
    public: 
        friend class Y;
    };
    

    如果我们使用受保护的公共说明符而不是公共说明符,有什么区别?像那样:

    class X { 
    protected: 
        friend class Y; 
    };
    

1 个答案:

答案 0 :(得分:7)

  1. 你是对的。友谊不是传递性的,也不是遗传的。
  2. 根据您放置friend声明的访问说明符,它没有任何区别。
  3. 只要班级A本身未被宣布为班级C的朋友。您无法访问CA的任何受保护或私有成员。