MST

星途 面试题库

面试题:C++复杂继承体系下构造函数调用顺序分析

考虑一个多重继承的场景,有基类A、B,类C同时继承自A和B,另外类D继承自C。A、B、C、D都有各自的构造函数,且C和D中还分别包含成员对象M1和M2。请详细阐述创建D类对象时所有构造函数的调用顺序,以及如果A、B构造函数有参数,在D类构造函数初始化列表中应如何正确初始化A、B的成员。
32.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数调用顺序
    • 首先调用基类A的构造函数。
    • 接着调用基类B的构造函数。
    • 然后调用类C中成员对象M1的构造函数。
    • 再调用类C的构造函数。
    • 之后调用类D中成员对象M2的构造函数。
    • 最后调用类D的构造函数。
  2. 在D类构造函数初始化列表中初始化A、B的成员: 假设A的构造函数为A(int a)B的构造函数为B(int b),则D类构造函数的初始化列表应如下:
D::D(int a, int b,...) : A(a), B(b), M2(...) {
    // D类构造函数的其他代码
}

在初始化列表中,按照继承层次,先列出基类AB的初始化,传入相应的参数,然后再初始化自身的成员对象M2。这样可以确保在D类对象创建时,基类AB的成员被正确初始化。