[英]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的適當方法。
當然,您將遇到一個問題,即轉換和多態性,因為它不會遵循繼承定律。
簡而言之,沒有好辦法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.