构造函数的调用顺序总是如下:
1.基类构造函数
如果有多个基类,则构造函数的调用顺序是基类在派生类表中出现的顺序,而不是在成员初始化表中的顺序。
2.成员对象构造函数
如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序。
3.派生类构造函数
作为一般规则,派生类构造函数应该不能直接向一个基类数据成员赋值,而是把值传递给适当的基类构造函数。
例:
class Aly :public People{ public: protected: string name; };
定义
Aly aly;
上述定义aly调用了三个构造函数:缺省的People基类构造函数、string类缺省的构造函数以便初始化name ,以及Aly 派生类的构造函数。
析构函数:
当派生类对象的生命周期结束时,如果派生类和基类析构函数都被定义了,则它们会被自动调用,并且所有的成员类对象的析构函数也会被自动调用。
析构函数的调用顺序:与构造函数正好相反。
-
派生类析构函数
-
成员类对象的析构函数
-
基类析构函数
-