1
15
示例可以通过如下组合实现:
|
2
6
你的例子仍然是一个has-a关系。
以下面的类为例,它大致相当于
以下两个类具有相同的功能:
在这个例子中,
|
3
4
|
4
1
这个问题可以用一种避免讨论某个具体例子的方式来回答。一个公开继承的类从定义其父类语义的所有内容开始——它的公共函数,以及它的公共状态变量(如果有的话)。如果这些都没有被重写,则它符合 Liskov substitution principle 这是一个被广泛接受的设计原则,即重写这些属性时应保持可替换性。 对于私有继承,除非程序员选择在派生类中以保留可替换性的方式实现(或重新实现)父类的所有公共属性,否则这些都不适用。由于C++不需要一个私有派生类来实现其父的公共方法和变量的版本,因此,如果派生类取代了父类作为私有成员的实例,那么这与代码中的小的和公式化的更改无关。特别是,对于私有继承,派生类在任何功能或操作上都不是父类类型的子类型,如果您的语言将派生类视为子类型,则会造成误解和混淆(尽管应该注意D,除非你的语言有一种方法来执行子类型(C++没有)的语义有效性,那么这实际上是一个风格问题。 |
optimusfrenk · GUID算法如何处理“时钟序列”? 6 年前 |
Cowsay · 如何在没有助手方法的情况下实现这个foldl0函数? 7 年前 |
Michael J · 使用不同的实现文件来实现多态性可以吗? 8 年前 |
Adi Micutzu · 使用什么方法在多台PC上分发算法? 9 年前 |
Veneet Reddy · 为什么我的快速排序实现不起作用? 9 年前 |
user3326689 · 在头文件c++[closed]中使用结构 10 年前 |