1.建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次:基类、对象成员所属类、自己所属类的构造函数
首先,调用基类的构造函数。按照继承链,从最直接的基类开始,向上依次调用直至最终的基类。
其次,会调用所有非静态成员对象(包括基类部分作为成员对象看待)的构造函数,按照它们在类中声明的顺序进行。
最后,调用自己的构造函数体内的代码。
2.
运行结果:AB
由于 Derived
的构造函数没有显式调用基类的构造函数,C++ 编译器会自动调用基类的默认构造函数。因此,当创建 Derived
类的实例时,会先输出 'A'(来自 Base
的默认构造函数),接着输出 'B'(来自 Derived
的构造函数)。所以最终输出为 "AB"。
3.虚基类的目的是解决多继承中的菱形问题,确保基类只被实例化一次,并非不能实例化。
4.
(2)所有虚基类的构造函数按照他们被继承的顺序构造 (1)所有非虚基类的构造函数按照他们被继承的顺序构造 (3)所有子对象的构造函数按照它们在类定义中声明的顺序构造 (4)派生类自己的构造函数体
这个顺序确保了虚基类的构造在非虚基类之前完成,避免了虚基类的多次构造问题,随后是非虚基类和成员对象的构造,最后是派生类自身构造函数的执行。