MST

星途 面试题库

面试题:C++复杂继承体系下对象成员初始化顺序调整

有一个继承体系,`ClassBase`是基类,包含成员变量`int baseVar`。`ClassDerived`继承自`ClassBase`,并且有自己的成员变量`float derivedVar1`、`std::string derivedVar2`。此外,`ClassDerived`还有一个成员是`std::vector<int>`类型。默认的初始化顺序是怎样的?若要先初始化`derivedVar2`,再初始化`derivedVar1`,最后初始化`std::vector<int>`,应采取什么措施?同时说明在这种调整下,基类成员`baseVar`的初始化时机。
42.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 默认初始化顺序
    • 首先初始化基类 ClassBase 的成员变量 baseVar
    • 然后按照声明顺序初始化派生类 ClassDerived 的成员变量,即先初始化 derivedVar1,接着初始化 derivedVar2,最后初始化 std::vector<int>
  2. 调整初始化顺序的措施: 在 ClassDerived 的构造函数初始化列表中,按照 derivedVar2derivedVar1std::vector<int> 的顺序进行初始化。例如:
    ClassDerived::ClassDerived() : derivedVar2("initial value"), derivedVar1(0.0f), myVector() {
        // 构造函数体
    }
    
  3. 调整后基类成员baseVar的初始化时机: 无论如何调整派生类成员变量的初始化顺序,基类 ClassBase 的成员变量 baseVar 总是在派生类成员变量初始化之前初始化。即先初始化 baseVar,然后按照构造函数初始化列表中指定的顺序初始化 derivedVar2derivedVar1std::vector<int>