1
爲了解決鑽石問題,我們開始進行虛擬繼承。虛擬繼承
class A {}
class B : virtual Public A {}
class C : virtual Public A {}
class D : public B, Public C {}
爲什麼不能這樣定義:
class A {}
class B : public A {}
class C : public A {}
class D : virtual public B, virtual public C {}
什麼是具有現有的解決方案來解決用C鑽石++的問題,而不是第二個背後的技術原因。 改變基類的繼承來解決派生類中的某些問題並不容易。
這將是偉大的,如果有人可以提供技術錯綜複雜。 謝謝。
我知道, 。我的問題更多的是語法。爲什麼我們不能有第二種語法?背後的原因是什麼? – user2704831
原因在這裏得到了很好的解釋: - http://en.wikipedia.org/wiki/Diamond_problem#The_diamond_problem –
C++在默認情況下遵循每個繼承路徑,所以D對象實際上包含兩個單獨的A對象,並且使用A的成員必須合格。 –