【发布时间】:2018-11-13 18:38:00
【问题描述】:
根据我最喜欢的作者Mr Scott Meyers 所说,private 继承和组合意味着相同的东西,也就是 Has-A 关系。因此,可以从组合中获得的所有内容(包含,当类 A 具有类 B 作为其成员时)都可以通过私有继承获得,反之亦然。
所以下面的代码应该是Has-A关系,但在我看来,不是!
class A : private boost::noncopyable {.. this is irrelevant };
谁能告诉我我失踪了?或者这段代码如何通过组合来实现?
【问题讨论】:
-
“但在我看来,它不是!”请解释;我也同意迈耶斯的观点。
-
所以这里我们继承了基类的不可复制部分,所以它更多的是IS-A关系,因为派生的也是不可复制的。
-
拥有一个不可复制的成员肯定会使
A也不可复制(除非您还添加了一些用户定义的副本和分配)。 -
顺便说一句,我所知道的关于私有继承的最佳 DASHED-WORDS 描述是“IMPLEMENTED-IN-TERMS-OF”。
-
私有继承通常与回调接口和消息接收器一起使用。正在实现的类是一个接收器,但接收器接口不是公共的,因为它只需要从特定的其他类调用。
标签: c++ inheritance implementation noncopyable