MST

星途 面试题库

面试题:C++中派生类创建时虚基类构造调用时机基础考察

请简述在C++中,当一个派生类继承自虚基类时,虚基类构造函数在何时被调用?并且说明在多层继承结构下(例如A虚继承于B,C继承于A,D继承于C),虚基类B的构造函数调用顺序有什么特点?
46.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 虚基类构造函数的调用时机
    • 在C++中,当一个派生类继承自虚基类时,虚基类的构造函数由最终派生类负责调用。也就是说,无论虚基类在继承体系中被间接继承了多少层,虚基类构造函数都只会在创建最终派生类对象时被调用一次。
  2. 多层继承结构下虚基类构造函数调用顺序特点
    • 对于多层继承结构(如A虚继承于B,C继承于A,D继承于C),虚基类B的构造函数在最终派生类D的构造函数执行时被调用,而且是在所有非虚基类构造函数之前调用。具体顺序为:先调用虚基类B的构造函数,然后按照继承顺序依次调用非虚基类(如A和C)的构造函数,最后调用最终派生类D自己的构造函数体。

例如:

class B {};
class A : virtual public B {};
class C : public A {};
class D : public C {};

int main() {
    D d;
    return 0;
}

在上述代码中,创建D对象时,先调用B的构造函数,接着调用A的构造函数,再调用C的构造函数,最后执行D的构造函数体。