MST

星途 面试题库

面试题:C++ 虚基类的构造函数调用顺序

在 C++ 中,当存在虚基类时,描述一下整个继承体系中构造函数的调用顺序,并举例说明。
36.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 调用顺序
    • 虚基类的构造函数(从最顶层的虚基类开始,按照继承顺序依次调用)。
    • 非虚基类的构造函数(按照继承顺序依次调用)。
    • 自身类的构造函数。
  2. 举例说明
#include <iostream>

class A {
public:
    A() {
        std::cout << "A's constructor" << std::endl;
    }
};

class B : virtual public A {
public:
    B() {
        std::cout << "B's constructor" << std::endl;
    }
};

class C : virtual public A {
public:
    C() {
        std::cout << "C's constructor" << std::endl;
    }
};

class D : public B, public C {
public:
    D() {
        std::cout << "D's constructor" << std::endl;
    }
};

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

在上述代码中,D 类继承自 BC,而 BC 都虚继承自 A。当创建 D 类对象 d 时,输出结果为:

A's constructor
B's constructor
C's constructor
D's constructor

首先调用虚基类 A 的构造函数,然后按照继承顺序调用非虚基类 BC 的构造函数,最后调用自身类 D 的构造函数。