面试题答案
一键面试- 对象创建时调用顺序:
- 首先调用类A的构造函数。原因是类B和类C都继承自类A,在创建类B和类C对象时,需要先初始化它们从类A继承的部分,这是C++继承机制的要求,先初始化基类部分。
- 接着调用类B的构造函数。因为在类D的多重继承声明中,类B先于类C列出(假设声明为
class D : public B, public C
),按照声明顺序进行初始化。 - 然后调用类C的构造函数。同样是按照声明顺序,在类B初始化后进行类C的初始化。
- 最后调用类D的构造函数。此时类D从类B和类C继承的部分以及类A的部分都已初始化完成,可以进行类D自身部分的初始化。
- 对象销毁时调用顺序:
- 首先调用类D的析构函数。因为对象销毁时,先销毁自身部分。
- 接着调用类C的析构函数。由于创建时是先B后C,销毁时顺序相反,这是为了保证资源释放的完整性,先释放后初始化的部分。
- 然后调用类B的析构函数。
- 最后调用类A的析构函数。类A是最顶层的基类,其成员是最先被初始化的,所以最后被销毁。
总结:
- 创建顺序:A -> B -> C -> D
- 销毁顺序:D -> C -> B -> A