Fun::Fun(int age, int weight) {
m_age = age;
m_weight = weight;
}
这是一种给对象进行的初始化的方法,知识进行简单的值传递。
在C++中,我们也可以使用初始化列表来实现相同的结果。
Fun(int age, int weight) : m_age(age), m_weight(weight) {};
语法:构造函数():成员变量1(值1), 成员变量2(值2).....{};
用初始化列表可以提高程序的效率和可读性,因为它可以避免在构造函数体中进行初始化,从而减少了构造函数的执行时间。
初始化列表初始化顺序
class Fun {
public:
int m_age;
int m_weight;
Fun(int weight) : m_weight(weight), m_age(m_weight){
cout << m_age << " " << m_weight << endl;
};
};
int main() {
Fun f1(50);
return 0;
}
上面代码看起来像是将给m_weight初始化为50,然后使用m_weight对m_age初始化,使m_age也为50
运行代码后会发现 m_weight的确为50,但m_age和我们设想的并不一样。
初始化列表对成员变量进行初始化操作时是按照类中成员变量定义的顺序进初始化,并不按照初始化列表中成员变量顺序进行初始化。
让我们再次分析上述代码,首先是按照类中成员变量定义顺序进行初始化,也仅是先对m_age进行初始化,此时编译器并不知道m_weight具体值,也就出现了上面随机值的现象,对m_age初始化完成后才会对m_weight进行初始化,此时将m_weight初始化为50。
在何时使用初始化列表
- 成员变量是引用类型时
- 数据成员是常量时
-
父类的构造函数有参数时,子类构造函数使用初始化列表初始化父类参数