|
|
1
15
示例可以通过如下组合实现:
|
|
|
2
6
你的例子仍然是一个has-a关系。
以下面的类为例,它大致相当于
以下两个类具有相同的功能:
在这个例子中,
|
|
|
3
4
|
|
|
4
1
这个问题可以用一种避免讨论某个具体例子的方式来回答。一个公开继承的类从定义其父类语义的所有内容开始——它的公共函数,以及它的公共状态变量(如果有的话)。如果这些都没有被重写,则它符合 Liskov substitution principle 这是一个被广泛接受的设计原则,即重写这些属性时应保持可替换性。 对于私有继承,除非程序员选择在派生类中以保留可替换性的方式实现(或重新实现)父类的所有公共属性,否则这些都不适用。由于C++不需要一个私有派生类来实现其父的公共方法和变量的版本,因此,如果派生类取代了父类作为私有成员的实例,那么这与代码中的小的和公式化的更改无关。特别是,对于私有继承,派生类在任何功能或操作上都不是父类类型的子类型,如果您的语言将派生类视为子类型,则会造成误解和混淆(尽管应该注意D,除非你的语言有一种方法来执行子类型(C++没有)的语义有效性,那么这实际上是一个风格问题。 |
|
AstralHex · 矩阵乘法代码工作不正常 11 月前 |
|
|
Giogre · 为包含许多数值字段的简单“struct”重载比较运算符 11 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 11 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 11 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 11 月前 |