class A {
int i;
public:
A() {cout<<"in A's def const\n";};
A(int k) {cout<<"In A const\n"; i = k; }
};
class B : virtual public A {
public:
B(){cout<<"in B's def const\n";};
B(int i) : A(i) {cout<<"in B const\n";}
};
class C : public B {
public:
C() {cout<<"in C def cstr\n";}
C(int i) : B(i) {cout<<"in C const\n";}
};
int main()
{
C c(2);
return 0;
}
这种情况下的输出是
in A's def const
in B const
in C const
为什么这不进入in A const
`它应该遵循 1 arg 构造函数调用的顺序。但是使用 virtual 关键字从 A 派生 B 实际发生了什么。
还有几个问题
即使我删除了上述程序中的 virtual 关键字并删除了所有默认构造函数,它也会出错。那么,为什么它需要 def 构造函数