虚拟继承

时间:2013-08-21 18:43:41

标签: inheritance virtual

为了解决钻石问题,我们选择虚拟继承。

class A {}
class B : virtual Public A {}
class C : virtual Public A {}
class D : public B, Public C {}

为什么不定义如下:

class A {}
class B : public A {}
class C : public A {}
class D : virtual public B, virtual public C {}

使用现有解决方案解决C ++中钻石问题的技术原因是什么,而不是第二个。 更改基类的继承以解决派生类中的某些问题是不是很尴尬。

如果有人可以提供技术错综复杂的话,那就太好了。 谢谢。

1 个答案:

答案 0 :(得分:0)

已回答here: -

您想要:(可通过虚拟继承实现)

   D
  / \
 B   C
  \ /
   A

而不是:(没有虚拟继承会发生什么)

    D
   / \
  B   C
  |   |
  A   A