1、先基类、后对象、再子类
多继承,初始化顺序跟基类的声明顺序有关,从左到右。
对象 ,与声明类的顺序有关,从上到下。
2、若基类的构造器是默认构造器,就可以不显示的调用,如果没有的话,必须显示调用
此规则同样适用于类中的对象。
3、派生类的析构顺序,与构造顺序相反。
先子类、后对象、再基类。正好符合压栈与出栈的顺序。
并且,不需要显示的调用析构器,因为析构器默认无参且不能重载,以下为演示代码:
#include <iostream> using namespace std; class X { public: X(){cout << "X(){}" << endl;} ~X(){cout << "~X(){}" << endl;} }; class Base { public: Base(){cout << "Base(){}" << endl;}; ~Base(){cout << "~Base(){}" << endl;}; }; class Derive : public Base { public: Derive(){cout << "Derive(){}" << endl;}; ~Derive(){cout << "~Derive(){}" << endl;}; private: X x; }; int main(int argc, char* argv[]) { Derive d; return 0; }
代码运行后的效果如下: