MST

星途 面试题库

面试题:C++中构造函数调用顺序的基础影响

假设有一个C++类继承体系,基类A有一个构造函数,派生类B继承自A且也有构造函数。请描述当创建一个B类对象时,构造函数的调用顺序,并说明这种调用顺序对初始化对象成员有什么影响。同时,给出一段简单代码来验证你的描述。
10.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 构造函数调用顺序
    • 当创建一个B类对象时,首先调用基类A的构造函数,然后再调用派生类B的构造函数。这是因为在创建派生类对象时,派生类对象包含基类对象的子对象,需要先初始化基类部分,再初始化派生类新增的部分。
  2. 对初始化对象成员的影响
    • 这种调用顺序确保了对象成员按照正确的层次结构进行初始化。基类的成员在派生类成员之前被初始化,使得派生类可以依赖基类已经初始化好的状态。例如,如果派生类的某个操作依赖基类的某个已初始化成员变量,那么这种顺序保证了在派生类构造函数执行时,基类成员已经准备好。
  3. 验证代码
#include <iostream>

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

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

int main() {
    B b;
    return 0;
}

在上述代码中,当main函数创建B类对象b时,会先输出A's constructor called.,然后输出B's constructor called.,验证了构造函数的调用顺序。