【发布时间】:2011-11-18 19:27:40
【问题描述】:
C++:我有一个带有纯虚函数 f() 的基类 A,然后两个类 B 和 C 虚拟继承自 A,还有一个类 D 继承自 B 和 C(典型的菱形结构):
A f() = 0
v/ \v
B C
\ /
D
下列情况下,何时何地需要实现f() = 0?
- B 和 C 也有纯虚函数(-> 抽象类是否必须实现继承的纯虚函数?)
- 其中只有一个(B XOR C)具有纯虚函数(-> 另一个是否仍必须实现 f()?)
- B 和 C 都没有自己的纯虚拟(-> 跳过 B 和 C 中的实现并将其“传递”给 D 的可能方法?)
- 在以上三种情况下,D需要实现f()吗?在哪些情况下 D 可以选择实现 f()?在哪些情况下,如果有的话,D 不可能实现 f()?
对于这类问题还有其他常见的建议吗?
谢谢。
【问题讨论】:
-
@Tux-D 什么?对于我正在从事的现实项目,这可能是一个可能的案例。我仍在考虑几种方法。
-
我通常认为菱形继承是糟糕的设计。当然有可能,但通常有更好的方法。多重继承最好使用纯虚拟基类。
-
我同意 AJG85。如果你有菱形继承模式,你应该重新考虑你的设计。
-
"我通常认为菱形继承是糟糕的设计。" 为什么? “带有纯虚拟基类。”那是什么?
标签: c++ inheritance multiple-inheritance pure-virtual