1.什么是成员初始化列表ios
#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"; 被初始化列表的值覆盖了spa
2.为何须要成员初始化列表对象
type和model都是常量,能够初始化但不能赋值,若是试图在构造函数的函数体中进行如 type = "xxx";之类的 赋值,将会报错。 从概念上讲,在进入构造函数的函数体以前,对象已经被建立,因此必须在对象建立以前完成初始化,因此C++发明了初始化列表,这种形式的赋值被认为就是初始化。blog
请注意:1.这种格式只能用于构造函数;ci
2.必须使用这种方式来初始化非静态const数据成员(静态const数据不属于对象因此也就不能在构造函数里初始化);get
3.必须用这种格式来初始化引用数据成员(这是由于引用与const数据相似,只能在建立时被初始化)string