我正在使用许多抽象类,它们只定义纯虚函数和虚拟(非纯)析构函数。
没有使用虚拟继承,是否仍然可以使用钻石继承结构? (我想确保即使某些程序员不知道他应该使用虚拟继承也没有问题。)什么是一个很好的资源,它提供了一个简短而完整的主题概述?
谢谢!
答案 0 :(得分:5)
你做不到。没有虚拟继承,继承图只是不是钻石。如果Derived
继承自Left
和Right
,并且两者都是从Base
非虚拟派生的,那么每个Base
会有两个Derived
个子对象对象
答案 1 :(得分:5)
虚拟继承是获取钻石的机制 - 如果你不使用虚拟继承,那么你就可以使用两个不同的公共基类副本 - 这不再是钻石,可能不是你想要的。
答案 2 :(得分:2)
This faq通过示例为多重继承提供了很好的答案。
对于钻石,你必须拥有虚拟继承。