在一个类中,我们往往可能会定义一个静态变量,但在声明一个类的时候不会进行内存的申请,只有在进行对象定义的时候才会进行内存申请,但问题来了,在程序进行到构造函数的时候,要对静态变量进行初始化,但因为是const静态变量,不能改变其初始值,会出现错误。因此,必须在执行构造函数之前,在创建对象时进行初始化。
C++提供了成员初始化列表语法来实现这个功能。
在构造函数定义处添加上冒号,并由逗号分割初始化列表。要初始化的变量后加括号,里面是初始化的值。
只有构造函数可以使用初始化列表语法
class queue
{
private:
struct Node{int item;struct Node * next;};
enum{Q_SIZE = 10};
Node * front;
Node * rear;
int items;
const int qsize;
public:
//queue();
queue(int qs = Q_SIZE);
};
queue::queue(int qs):qsize(qs),front(NULL),rear(NULL),items(0)
{
//front = rear = NULL;
// items = 0;
//qsize = qs;
}
如果是被声明为引用的类成员,也必须使用这样的语法
class aaa
{
.......................
};
class bbb
{
aaa & ccc;
};
bbb::bbb(aaa & s):ccc(s)
{
}
当然,C++也支持类内初始化,即在类声明的时候就对变量进行初始化。