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