MST

星途 面试题库

面试题:C++类成员变量初始化:复杂类型及继承关系

定义一个基类 `Base`,包含一个 `const int` 类型的成员变量 `baseValue`。再定义一个派生类 `Derived`,继承自 `Base`,并新增一个 `std::vector<int>` 类型的成员变量 `vec`。请编写 `Derived` 类的构造函数,正确初始化 `baseValue` 和 `vec`,同时说明在这种情况下初始化顺序的重要性及原因。
40.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <vector>

class Base {
public:
    const int baseValue;
    Base(int value) : baseValue(value) {}
};

class Derived : public Base {
public:
    std::vector<int> vec;
    Derived(int value, const std::vector<int>& v) : Base(value), vec(v) {}
};

初始化顺序的重要性及原因

  1. 重要性:在 Derived 类的构造函数中,必须先初始化基类 BasebaseValue,再初始化自身的 vec 成员变量。
  2. 原因
    • 基类成员初始化:基类的成员变量在派生类构造函数执行体之前就需要被初始化。baseValueconst int 类型,一旦初始化就不能再修改。如果不先通过基类构造函数初始化 baseValue,就无法为其赋予正确的值。
    • 对象完整性:按照基类成员先初始化,然后是派生类成员初始化的顺序,能够保证对象在整个初始化过程中的完整性。如果先初始化 vec 再初始化 baseValue,在 vec 初始化时 baseValue 可能还未被正确初始化,这可能导致未定义行为或逻辑错误。