类的构造函数的作用是对其成员进行初始化。而在构造函数中可以使用初始值列表为新创建的对象的成员进行赋值。
1 初始值列表
在类的构造函数名之后紧跟着冒号,冒号后面是要初始化的成员名,之后是圆括号或者花括号括起来的初始值。这样的结构就是构造函数的初始值列表,如下所示。
class A
{
public:
A() :a(1),b(2) {};
int a;
int b;
};
其中,自定义类A具有一个包含了初始值列表的构造函数,使用该构造函数创建对象时,该对象的成员变量a的值是1,b的值是2。
2 类内初始化
对于“1 初始值列表”中提到的自定义类A,如果其还存在多个构造函数,
A(int i) :a(1),b(2) {};
A(int i, int j) :a(1),b(2) {};
A(int i, int j, int z) :a(1),b(2) {};
多个构造函数都包含了相同的初始值列表,代码看上去有些冗长。此时可以使用类内初始化的方法对其进行简化。
类内初始化指的是在定义类的成员时对其赋初值,赋初值的方式有两种:使用等号赋值和使用大括号赋值。
class A
{
public:
.....
int a = 1;
int b{ 2 };
};
此时,对于之前提到的包含初始值列表的构造函数,就可以简写成如下格式
A(){};
A(int i) {};
A(int i, int j){};
A(int i, int j, int z) {};
之后无论使用哪一种构造方法来产生该类的对象,这个对象的a和b的值分别是1和2。需要注意的是,类内初始化是C++11的新属性。