C++ c++;多重继承构造函数调用

C++ c++;多重继承构造函数调用,c++,inheritance,C++,Inheritance,在下面的行中,类A是基类,由类B和C继承。 类D继承自B和C。此外,D中的构造函数调用B、C和A的构造函数。 因为当B和C将A作为虚拟继承时,它们没有资格直接调用A的构造函数(因为对A的调用必须通过第三代进行) 我的问题是,如果我想创建一个类B的对象,那么当A实际上被继承时,是否还有调用A的构造函数的方法(传递v1和v2,用于初始化的变量) 也可以为A提供B的初始值设定项。虚拟继承意味着,如果你有一个派生得更多的对象,那么虚拟基础就是由派生得最多的对象构建的。但是,如果您只构建B的实例,那么该实

在下面的行中,类A是基类,由类B和C继承。 类D继承自B和C。此外,D中的构造函数调用B、C和A的构造函数。 因为当B和C将A作为虚拟继承时,它们没有资格直接调用A的构造函数(因为对A的调用必须通过第三代进行)

我的问题是,如果我想创建一个类B的对象,那么当A实际上被继承时,是否还有调用A的构造函数的方法(传递v1和v2,用于初始化的变量)


也可以为
A
提供
B
的初始值设定项。虚拟继承意味着,如果你有一个派生得更多的对象,那么虚拟基础就是由派生得最多的对象构建的。但是,如果您只构建
B
的实例,那么该实例就是派生最多的对象。那么就这样写吧:

 class B : public virtual A
 {
 public:
     B() : A(1, 2) {  }
     // ...
 };

只有当您从
B
派生时,基初始值设定项才会被忽略。

您可以做的是使类B和C从A正常继承(不带关键字“virtual”),但使类D从B和C虚拟继承。这将允许您通过为类A构造函数传递值来创建类B(或C)的对象>

 class B : public virtual A
 {
 public:
     B() : A(1, 2) {  }
     // ...
 };