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