接口的钻石问题

时间:2011-01-14 08:21:23

标签: c++ multiple-inheritance diamond-problem

我正在使用许多抽象类,它们只定义纯虚函数和虚拟(非纯)析构函数。

没有使用虚拟继承,是否仍然可以使用钻石继承结构? (我想确保即使某些程序员不知道他应该使用虚拟继承也没有问题。)什么是一个很好的资源,它提供了一个简短而完整的主题概述?

谢谢!

3 个答案:

答案 0 :(得分:5)

你做不到。没有虚拟继承,继承图只是不是钻石。如果Derived继承自LeftRight,并且两者都是从Base非虚拟派生的,那么每个Base会有两个Derived个子对象对象

答案 1 :(得分:5)

虚拟继承是获取钻石的机制 - 如果你不使用虚拟继承,那么你就可以使用两个不同的公共基类副本 - 这不再是钻石,可能不是你想要的。

答案 2 :(得分:2)

This faq通过示例为多重继承提供了很好的答案。

对于钻石,你必须拥有虚拟继承。