C++:我有一个带有纯虚函数 f() 的基类 A,然后两个类 B 和 C 虚拟继承自 A,以及一个继承自 B 和 C 的类 D(典型的菱形结构):
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()?
对于这类问题,还有其他常见的建议吗?
谢谢。