死亡之钻
C++ Diamond of Death
好了,所以我明白了如何解决死亡之钻继承的问题,当你完全控制所有的类,但如果你只控制最后一个类继承从两个这里是:
class A {};
class B : public A {};
class C : public A {};
class D : public B, public C {};
和我没有办法编辑B和C只有D,有没有一个简单的方法,我可以做到这一点?
这是一个很好的理由,你不能强迫B
和C
共享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
}
};
B
和C
是较好的分类。它们无法处理无法进入的情况(i的值无效)。
如果有一种方法可以做你要求的(struct D:B,C
,其中B
和C
共享A
), D::A::i
的值是多少?
虚拟继承意味着"我需要这个类,但我不需要它的一些有效值,而且我完全不介意别人乱动它"。
通过遏制来伪造。让D包含B和C,并给D一个与B和C的公共接口并集相同的公共接口。然后从D的公共接口调用B和C的相应方法。
当然你会有一个问题,因为它不会遵循继承的规律。
总之,没有好的办法。
相关文章:
- 没有找到相关文章