在下面几行中,类 A 是基类,由类 B 和 C 继承。类 D 继承自 B 和 C。此外,D 中的构造函数调用 B、C 和 A 的构造函数。因为当 B 和 C 继承 A 时virtual,它们没有资格直接调用 A 的构造函数(因为必须通过第 3 代调用相同的构造函数)。
我的问题是,如果我想创建一个 B 类的对象,那么由于 A 是虚拟继承的,是否有调用 A 的构造函数(传递 v1 和 v2,用于初始化的变量)?
class A {
int a1,a2;
A() {
}
A(int v1,v2) {
a1 = v1;
a2 = v2;
}
};
class B:virtual public A {
int b1,b2;
B() {
}
B(int v1,v2) {
b1 = v1;
b2 = v2;
}
};
class C:virtual public A {
int c1,c2;
C() {
}
C(int v1,v2) {
c1 = v1;
c2 = v2;
}
};
class D:public B,public C {
int d1,d2;
D() {
}
D(int v1,v2):B(v1,v2),C(v1,v2),A(v1,v2)
{
d1 = v1;
d2 = v2;
}
};