【问题标题】:Is friendship inherited in C++?友谊是在 C++ 中继承的吗?
【发布时间】:2010-10-10 12:24:39
【问题描述】:

假设我有一个Base 类:

class Base {
    friend SomeOtherClass;
};

还有另一个(不同的)类继承自Base

class AnotherClass : public Base {}

友谊也会继承吗?

【问题讨论】:

  • 又一个问题本应使用编译器轻松回答。
  • @shoosh:编译器不一定符合标准。这样的问题应该由标准来回答,而不是编译器。
  • @shoosh 哪个编译器? VS for windows 还是 g++ for unix?哪个版本的 C++ 标准?即使你的编译器工作或不工作,你也可以问很多问题。
  • 也许现在要问的一个好问题是,你能做到让友谊得到继承吗?它肯定对我正在做的事情有用,而不是写出我想要“友谊”的所有课程的列表。

标签: c++ inheritance friend access-control


【解决方案1】:

原则上,派生类继承基类的每个成员,除了:

* its constructor and its destructor
* its operator=() members
* its friends

所以,不。朋友不会被继承。

【讨论】:

  • 有趣的是,您选择了准确的措辞来表达这个网站:cplusplus.com/doc/tutorial/inheritance
  • 也许现在要问的一个好问题是,你能做到让友谊得到继承吗?它肯定对我正在做的事情有用,而不是写出我想要“友谊”的所有课程的列表。
【解决方案2】:

不,不是。

编辑:引用 C++ 标准,第 11.4/8 节

友谊既不是遗传也不是 传递。

【讨论】:

    【解决方案3】:

    【讨论】:

    • 链接中的示例显示了与 OP 问题相反的情况。我想补充一点,SomeOtherClass 将有权访问在AnotherClass 的对象中继承的Base 字段和方法。
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2011-11-19
    • 2013-10-10
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2019-08-19
    • 2011-09-28
    相关资源
    最近更新 更多