0
A
回答
13
非虛擬繼承:
struct Beer : Alcohol {};
struct Wine : Alcohol {}; // I'll have what he's having!
Alcohol Alcohol // ...whe-ere'sh my... bayshe clashhh... hic
^ ^
| |
Beer Wine
^ ^
\ /
\ /
Cider
虛繼承:
struct Beer : virtual Alcohol {}; // virtual = doesn't get you drunk
struct Wine : virtual Alcohol {};
Alcohol // you can see clearly now
^ ^
/ \
Beer Wine
^ ^
\ /
\ /
Cider
在非虛擬情況下,有兩個disctinct基地子對象。我們來看看他們:
Cider x;
Alcohol & a1 = static_cast<Beer&>(x);
Alcohol & a2 = static_cast<Wine&>(x);
assert(std::addressof(a1) != std::addressof(a2));
相關問題
- 1. 從兩個類繼承在C#
- 2. 從兩個類繼承
- 3. c# - 從一個基類繼承兩個類給出錯誤3024
- 4. Python:如何從兩個類繼承?
- 5. 繼承兩個類 - Javascript
- 6. 繼承兩個Java類
- 7. 從抽象類繼承C#
- 8. 從C++類繼承NSObject
- 9. 從protobuf繼承C++類
- 10. C#類繼承
- 11. 繼承類。 C++
- 12. C#繼承類
- 13. 類繼承C++
- 14. c#繼承類
- 15. C#:繼承一個子類,它從父
- 16. 從C++中的兩個類繼承並插入到列表中
- 17. C++/CLI:從一個CLR類繼承,多個C ++類
- 18. C++繼承不承認類
- 19. C#繼承。從基類派生類
- 20. c#類的繼承
- 21. C++類的繼承
- 22. Objective-C類繼承
- 23. C#在表單中繼承一個類
- 24. 如何從另一個繼承類的繼承類的說話
- 25. 從JSAPI繼承C#
- 26. 從2類繼承
- 27. 繼承。從父類
- 28. 從葉類繼承
- 29. 迭代兩個繼承類(相同基類)的兩個列表
- 30. 從C#中的本地C++繼承,並將繼承類向後傳遞給C++
很明顯,有了這麼多的酒精,你會看到雙倍,並且會有*兩個*基地。 –
獨立於答案:這是一個壞主意。蘋果酒既不是葡萄酒也不是啤酒,所以它不應該從其中任何一方繼承。 –
谷歌搜索「鑽石繼承虛擬」將出現大量的文章解釋這一點。而且,BTW,Kerrek SB和Baum mit Augen都是正確的。 – davidbak