C++ 死亡钻石

标签 c++ inheritance diamond-problem

好吧,我明白当您完全控制所有类时如何解决死亡继承的菱形继承(钻石问题),但是如果您只控制最后一个类以从两个类继承,该怎么办 所以我有这个:

class A {};
class B : public A {};
class C : public A {};
class D : public B, public C {};

我无法编辑 B 和 C,只能编辑 D,有没有简单的方法可以做到这一点?

最佳答案

这是一个很好的理由,您不能强制 BC 共享 A。考虑:

struct A {int i;};
struct B : A {
 B(){i=3;}
 void foo() {
  //crash if i!=3
 }
};
struct C : A {
 C(){i=4;}
 void bar() {
  //crash if i!=4
 }
};

BC 是很好的类。他们无法处理他们无法进入的情况(i 的值无效)。

如果有一种方法可以满足您的要求(struct D:B,​​C,其中BC共享A),D::A::i 的值是多少?

虚拟继承意味着“我需要这个类,但我不需要它的一些有效值,而且我完全同意别人乱搞它”。

关于C++ 死亡钻石,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16987968/

相关文章:

C++ cocos2dx事件回调多次调用

C++ Winapi 在 .exe 文件中包含 DLL

c++ - 打印继承功能

Java:你怎么称呼这种多重继承歧义?

python - 如何: safely call super constructors with different arguments

c++ - 通过 QObject 子类实现多重继承的最接近解决方案

C++——我们为什么要在此构造函数中使用 explicit?

c++ - 线程的 chroot 替代方案

java - 我可以从子级的重载方法调用祖先的方法吗?

C++ 重写方法不起作用