【发布时间】:2011-11-19 05:12:18
【问题描述】:
我知道友谊不是遗传的。我在问自己:为什么?为什么 C++ 设计者决定不让友谊被继承?你觉得友谊继承会有用吗?我自己的回答是肯定的:就像 B 是 A 的朋友一样,我想让整个班级成为 A(B 及其派生词)的朋友。也许,应该可以说:only B 成为 A 的朋友,或者让 B 和 其派生类成为 A 的朋友。
附言。 我不知道为什么你们中的许多人认为我是在要求自动延长友谊。我对程序员使用某种机制(不是自动)将友谊扩展到整个家庭的可能性更感兴趣。
【问题讨论】:
-
你没有展示一个引人注目的用例。就个人而言,我看不到它的用处。在大多数情况下,您不需要继承友谊,因为您可以使用普通继承:函数
foo(A&)是A的朋友,当然也适用于B类型的参数。 -
Friendship 的全部目的是表明两个具有强耦合的实体,允许友谊被继承并沿着层次结构传播,这将打破友谊存在的基础,也打破了友谊的存在。非常 OOP 原则。 -
我想你想等待模块(例如C#中的
internal保护级别或Java中的default保护级别)。这样的事情可以允许一组类(同一个模块中的那些)访问默认/内部属性。 -
所以我写了一个 DB 类和 DB worker 类,因为 worker 是 DB 的朋友(因为我一起实现了它们,我知道我可以相信工人不会表现得不好)。现在您一起编写从 DB 工作者继承的 EvelWorker。我的数据库绝对不喜欢 EvelWorker,因为您不知道数据库内部是如何工作的。
标签: c++ inheritance friend access-control