班级友谊——一个谜

Class friendship - a puzzle

本文关键字:一个 友谊      更新时间:2023-10-16

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

class A { 
}; 
class B { 
protected: 
    friend class A; 
};
class C { 
public: 
    friend class B; 
};
参考上面的示例代码,假设上面的类有数据成员,C的成员的哪些名称可以在A的成员声明中使用?
  1. 私有成员

  2. 仅受保护成员

  3. C的所有数据成员

  4. 仅限公众成员

  5. C的数据成员*

我选择答案4,因为友谊是不可及的。因此,A是B的朋友,但A不是C的朋友(即使B是C的朋友)。这是正确的想法吗?

另外,我的问题是,到目前为止(在教程中)我遇到的例子中,友谊是这样声明的:

class X { 
public: 
    friend class Y;
};

如果不使用public说明符,而使用protected说明符,会有什么不同?像这样:

class X { 
protected: 
    friend class Y; 
};
  1. 你是正确的。友谊既不能传递,也不能继承。
  2. friend声明中使用什么访问说明符没有任何区别。

只要类A本身没有被声明为类C的友元。您不能访问AC的任何受保护或私有成员。