Inheritance 虚拟继承

Inheritance 虚拟继承,inheritance,virtual,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++中的钻石

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

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++中的钻石问题的解决方案中,技术问题的原因是什么? 改变基类的继承以解决派生类中的一些问题不是很尴尬吗

如果有人能提供复杂的技术,那就太好了。 谢谢

答案如下:-

您希望:(通过虚拟继承可以实现)

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


我知道。我的问题更多的是关于语法。为什么我们不能有第二种语法?原因是什么?这里解释的原因是:C++默认地分别继承每个继承路径,所以D对象实际上包含两个单独的对象,并且A成员的使用必须适当地限定。如果从A到B继承,从A到C继承都标记为“虚”(例如,“B类:虚拟公共A”)C++特别注意只创建一个对象,并且A成员的使用正确。如果虚拟继承和非虚拟继承混合,则对于A.C++的每个非虚拟继承路径都有一个虚拟A和非虚A,需要明确声明使用哪个父类。
   D
  / \
 B   C
  \ /
   A
    D
   / \
  B   C
  |   |
  A   A