目录
成员初始化列表语法
01)问题的提出:
对于一个Queue类的声明(不存在问题,注意在类中声明一个常量):
class Queue
{
private:
int items;
const int qsize; //常量
pubilc:
Queue(int qs); //构造函数
...
};
Queue类构造函数的定义(存在问题,因为不能给常量qsize赋值):
Queue::Queue(int qs)
{
items = 0;
qsize = 0; //不合法!
}
02)解决的方法:使用成员初始化列表
Classy::Classy(int n,int m) : mem1(n), mem2(0), mem3(n*m+2)
{
...
}
以上将n的值赋给mem1,将0赋给mem2,将n*m+2的值赋给mem3。从概念上说,这些初始化构造是在对象创建时完成的,此时还未执行
大括号中的任何代码。请注意一下几点:
A 成员初始化列表只能用于构造函数
B 必须用这种格式来初始化非静态const数据成员
C 必须用这种格式来初始化引用数据成员
D 不能讲成员初始化列表用于构造函数之外的其他类方法
E 成员初始化列表的括号方式也可以用于常规舒适化,可以将下述代码:
int games = 162;
double talk = 2.71828;
替换为:
int games(162);
double talk(2.71828);
03)C++11的类内初始化:
class Classy
{
int mem1 = 10;
const int mem2 = 20;
};
与在构造函数中使用成员初始化列表等价:
Classy::Classy() : mem1(10), mem2(20) { ... }
也可以将初始值替换为其他的数值:
Classy::Classy(int n) : mem1(n) { ... } //此时mem1=n, mem2=20