【问题标题】:Class friendship - a puzzle班级友谊 - 一个谜题
【发布时间】:2012-12-31 23:39:20
【问题描述】:

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

class A { 
}; 

class B { 
protected: 
    friend class A; 
};

class C { 
public: 
    friend class B; 
};

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

  1. 仅限私人成员

  2. 仅限受保护的成员

  3. C 的所有数据成员

  4. 仅限公共成员

  5. 没有 C 的数据成员*

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

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

class X { 
public: 
    friend class Y;
};

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

class X { 
protected: 
    friend class Y; 
};

【问题讨论】:

  • +1 表示一个很好的问题。

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


【解决方案1】:
  1. 你是对的。友谊不是传递的,也不是继承的。
  2. friend 声明中放置的访问说明符下没有任何区别。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2023-03-14
    • 2011-04-23
    相关资源
    最近更新 更多