类成员变量的初始化对于初学者来说是一个头疼的问题,总是记不住XXX类型应该怎样进行初始化。为了解决后顾之忧,今天就把类中所有类型的成员变量的初始化做一个总结。
首先,我们来看看C++的类中都有哪几种类型的成员变量。
class test
{
private:
int a;//普通成员
const int b;//常量成员
static int c;//静态成员
static const int d;//静态常量成员
int &e;//引用类型成员
};
大概的类型就是这几类,当然还有其他一些比如 int* f; int* &g;const int* h;这些无非都可以归为以上某一类。因此为了简化就不详细罗列了。
成员变量的初始化有且仅有两种:
1)用“=”赋值
2)用成员初始化列表
记住一点:只能用成员初始化列表有两类:常量成员(注意没有静态常量成员)和引用类型成员。
再记住一点:静态成员和静态常量成员由于是类共有的,不是属于某一个对象的,因此不能再构造函数中初始化。
最后记住一点:静态成员(这里不包括静态常量成员)必须在类外初始化。
最后的最后记住一点:引用变量必须初始化后才能使用。
class test
{
//int a=1;//错误:对象没有构造,尚未分配内存空间
int a;
const int b;
//static int c=1;//错误:不可以在声明时初始化
static int c;
const static int d=1;//唯有该类型可以这样
int &e;//引用类型必须用成员初始化列表
public:
test(int _e):b(1),e(_e)/*引用初始化必须为左值*/{}
};
int test::c=1;
const int test::d=1;//也可以这样初始化
最后说明 一点,成员变量的初始化顺序只与声明的顺序一致,而和在程序中赋值先后顺序无关。