MST

星途 面试题库

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

考虑如下C++代码结构:有一个基类A,派生类B继承自A,同时类C包含一个B类对象作为成员变量,类D又继承自C。假设每个类(A、B、C、D)都有各自的构造函数,在创建D类对象时,详细分析构造函数的调用顺序,并且如果A类构造函数需要参数,在D类构造函数初始化列表中应该如何正确传递参数?
34.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数调用顺序
    • 首先调用基类A的构造函数。因为B继承自AC包含B对象,D继承自C,基类A处于继承体系的最上层,所以先构造A
    • 接着调用B的构造函数。BA的派生类,在A构造完成后构造B
    • 然后调用C的构造函数。C包含B对象作为成员变量,在B构造完成后构造C
    • 最后调用D的构造函数。D是继承体系的最下层,在ABC都构造完成后构造D
  2. 如果A类构造函数需要参数,在D类构造函数初始化列表中的传递方式: 假设A类构造函数为A(int param)D类构造函数的初始化列表应该如下:
D::D(int aParam) : A(aParam), C(), B() {
    // D类构造函数的其他逻辑
}

D类构造函数的初始化列表中,直接通过A(aParam)将参数aParam传递给A类的构造函数,然后依次初始化CB(这里CB假设无特殊参数需求,如果有,按照同样方式在初始化列表中传递参数)。