c++ - 友元和继承有什么区别?

标签 c++ inheritance friend

假设有两个类A和B:

class A {};
class B {};

下面两个例子在哪些方面不同?

示例 1:

class C : public A, public B {}; 

示例 2:

class C
{
    //private
    friend class A;
    friend class B;
}

最佳答案

A friend 可以触摸任何它的 friend 的 private 部分(双关语只是轻微故意的!;)),但不能触摸 ABC 的一部分 - 这只是意味着“AB 可以触及 C 的私有(private)位")。 private 之外的任何东西当然也可用于 AB,所以如果 Cprotectedpublic 成员,也将可用。

当您继承时,AB 成为C 的一部分。 AB 的任何 private 部分对 C 不可用。在“is-a”与“has-a”命名法中,C 现在是-a A 和 is-a B - 在换句话说,它是从 A 继承而来的,所以它“从接口(interface)的角度来看表现得像 A

关于c++ - 友元和继承有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085169/

相关文章:

c++ - 为什么通常的访问控制检查适用于通过模板参数访问时用于指定显式实例化的名称?

c# - WPF 子控件,仅样式内容部分

java - 构造函数不是类的成员吗?

c++ - 允许 "friend"类仅访问一些私有(private)成员

c++ - 限制类的模板 friend

插入数据后 C++ 映射为空。

c++ - 在 C++ 的 Box2D 中添加关节后, body 改变了它的位置

java - 无法从子类访问 protected 方法

c++ - 友元函数和命名空间。无法访问类中的私有(private)成员

c++ - boost log - 使用全局记录器时 undefined reference