MST

星途 面试题库

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

考虑以下C++代码结构: ```cpp class Base { public: int baseVal; Base(int val) : baseVal(val) {} }; class Derived : public Base { public: int derivedVal; A subObj; Derived(int bVal, int dVal, int aVal) : subObj(aVal), derivedVal(dVal), Base(bVal) {} }; ``` 这里 `A` 是一个已定义的类。请详细说明在创建 `Derived` 类对象时,`baseVal`、`derivedVal` 和 `subObj` 的初始化顺序,并阐述背后的原理。
44.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 初始化顺序
    • baseVal
    • subObj
    • derivedVal
  2. 原理
    • 在C++中,当创建派生类对象时,首先会调用基类的构造函数来初始化基类部分。所以在 Derived 类的构造函数中,Base(bVal) 会首先执行,初始化 baseVal
    • 然后按照成员变量在类中声明的顺序进行初始化。在 Derived 类中,subObj 声明在前,derivedVal 声明在后,所以 subObj 会在 derivedVal 之前初始化。虽然在构造函数初始化列表中 derivedVal 写在 subObj 之前,但初始化顺序是由声明顺序决定的。