我正在使用许多抽象类,它们只定义纯虚函数和一个虚拟(非纯)析构函数。
不使用虚拟继承的菱形继承结构还可以吗?(我想确保即使某些程序员不知道他应该使用虚拟继承也不会出现问题。)有什么好的资源可以简短而完整地概述这个主题?
谢谢!
我正在使用许多抽象类,它们只定义纯虚函数和一个虚拟(非纯)析构函数。
不使用虚拟继承的菱形继承结构还可以吗?(我想确保即使某些程序员不知道他应该使用虚拟继承也不会出现问题。)有什么好的资源可以简短而完整地概述这个主题?
谢谢!
你不能。如果没有虚拟继承,继承图就不是菱形。如果从和Derived
继承,并且都从 非虚拟派生,那么每个对象将有两个子对象。Left
Right
Base
Base
Derived
虚拟继承是获得钻石的机制——如果你不使用虚拟继承,那么你就是公共基类的两个不同副本——这不再是真正的钻石,可能也不是你想要的。
此常见问题解答通过示例为多重继承提供了很好的答案。
对于钻石,你必须有虚拟继承。