类构造函数(Constructor)的初始化列表的使用
构造函数是与类同名的函数,它与普通函数的区别在于,它没有返回类型。
在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号","隔开。下面举个例子。
class myClass
{
public :
myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
~myClass();// 析构函数
int m_a;//声明变量
const int m_b;//声明一个常量
}
myClass::myClass():m_a(1),m_b(1)// 初始化列表
{
}
上面的例子是利用冒号对构造函数初始化列表的使用,如下是在使用时几个需要注意的点:
(1)初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但二者其实有差别的。在初始化列表中是对变量进行初始化,而在构造函数内是进行赋值操作。const类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值,因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化,即下面的代码将会出错:
myClass::myClass()
{
m_a = 1;// 正确赋值操作
m_b = 1;// 错误,const变量不能进行赋值操作;
}
(2)初始化的顺序与成员变量声名的顺序相同。
先看一下下面的程序:
myClass::myClass():m_b(1),m_a(m_b)
{
}
执行结果:m_b=1,m_a为一个随机数
正确做法如下:
myClass::myClass():m_a(1),m_b(m_a)
{
}
(3)对于继承的类来说,在初始化列表中也可以进行基类的初始化。初始化的顺序是:先基类初始化,再根据该类自己的变量的声明顺序进行初始化。