MST

星途 面试题库

面试题:C++ 复杂虚基类继承体系构造调用顺序分析

假设有这样一个C++继承体系:类A为虚基类,类B和类C都以虚继承方式继承自A,类D多重继承自B和C。请详细分析当创建D类对象时,各个类构造函数的调用顺序及原因。如果在类A、B、C、D的构造函数中分别添加输出语句以标记调用,写出最终的输出结果。
36.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数调用顺序分析

    • 当创建D类对象时,首先调用虚基类A的构造函数。这是因为虚继承的目的是为了保证在多重继承体系中,虚基类只有一份实例。无论从哪个路径继承,虚基类的构造函数都最先被调用,以确保虚基类部分的正确初始化。
    • 接着调用B的构造函数,因为BD的直接基类之一,且B继承自A(虚继承)。
    • 然后调用C的构造函数,C同样是D的直接基类,且C也继承自A(虚继承)。
    • 最后调用D的构造函数,对D类自身的数据成员进行初始化。
  2. 添加输出语句后的输出结果: 假设在类ABCD的构造函数中分别添加cout << "A constructor" << endl;cout << "B constructor" << endl;cout << "C constructor" << endl;cout << "D constructor" << endl;这样的输出语句。

最终输出结果为:

A constructor
B constructor
C constructor
D constructor