说说 C++ 类对象的初始化顺序,有多重继承情况下的顺序
1. 创建派生类的对象,基类的构造函数优先被调用(也优先于派生类里的成员类);
2. 如果类里面有成员类【就是说类中有类】,成员类的构造函数优先被调用;(也优先于该类本身的构造函数)
3. 基类构造函数如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序;
4. 成员类对象构造函数如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;
5. 派生类构造函数,作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递给适当的基类构造函数,否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)
6. 综上可以得出,初始化顺序:
父类构造函数–>成员类对象构造函数–>自身构造函数
其中成员变量的初始化,与声明顺序有关,
构造函数的调用顺序是:类派生列表中的顺序。析构顺序和构造顺序相反。