C++ 成员初始化列表
1.什么是成员初始化列表
#include<iostream> #include<string> using namespace std; class Weapon { private: string name; const string type; const string model; public: Weapon(string& name, string& type, string& model) :name(name), type(type), model(model) { name = "Cloud"; } string getProfile() { return "name: " + name + "\ntype: " + type + "\nmodel: " + model; } }; int main(void) {
string name = "Comet";
string type = "carbine";
string model = "rifle";
Weapon weapon(name, type, model);
cout << weapon.getProfile() << endl; cin.get(); return 0; }
上面代码中标红的部分,就是成员初始化列表
注意观察,构造函数里的 name = "Cloud"; 被初始化列表的值覆盖了
2.为什么需要成员初始化列表
type和model都是常量,可以初始化但不能赋值,如果试图在构造函数的函数体中进行如 type = "xxx";之类的 赋值,将会报错。 从概念上讲,在进入构造函数的函数体之前,对象已经被创建,所以必须在对象创建之前完成初始化,所以C++发明了初始化列表,这种形式的赋值被认为就是初始化。
请注意:1.这种格式只能用于构造函数;
2.必须使用这种方式来初始化非静态const数据成员(静态const数据不属于对象所以也就不能在构造函数里初始化);
3.必须用这种格式来初始化引用数据成员(这是因为引用与const数据类似,只能在创建时被初始化)