不执行参数化基类构造函数的中间类的存在

时间:2015-08-14 18:24:04

标签: c++ constructor virtual-inheritance

我的代码:

class Parent
{
public: Parent() { cout << "Default Parent" << endl; }
        Parent(int x) { cout << "Parameterized Parent" << endl; }
};
class Child1: virtual public Parent
{
public: Child1() :Parent(10) { cout << "Default Child1" << endl; }
};
class Child2: virtual public Parent
{
public: Child2() :Parent(10) { cout << "Default Child1" << endl; }
};
class GrandChild: public Child1, public Child2
{
public:
    GrandChild() { cout << "Default GrandChild" << endl; }
};
int main()
{
    GrandChild G;
    return 0;
}

输出:

default Parent
default Child1
default Child2
default GrandChild

我知道除非另有说明,否则这里派生的类最多会调用Parent类的默认构造函数。

但为什么ChildX类的参数化Parent构造函数调用永远不会被执行?没有ChildX类,GrandChild类不能存在(?)。如果没有参数化调用,则不会创建ChildX类(?)。

0 个答案:

没有答案