C++类中成员变量的初始化总结(转帖)
本⽂转⾃:
1. 普通的变量:
⼀般不考虑啥效率的情况下可以在构造函数中进⾏赋值。考虑⼀下效率的可以再构造函数的初始化列表中进⾏。
1 class CA
2 {
3 public:
4      int data;
5 public:
6      CA();
7 };
8
9 CA::CA():data(0) //……#1……初始化列表⽅式
10 {
11    //data = 0;//……#1……赋值⽅式
12 };
2、static 静态变量:
static变量属于类所有,⽽不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有⼀个。在这种性质上理解,有点类似于全局变量的唯⼀性。
1 class CA
2 {
3 public:
4      static int sum;
5
6 public:
7    CA();
8 };
9 int CA::sum=0;    //……#2……类外进⾏初始化
3、const 常量变量:
const常量需要在声明的时候即初始化。因此需要在变量创建的时候进⾏初始化。⼀般采⽤在构造函数的初始化列表中进⾏。
1 class CA
2 {
3 public:
4    const int max;
5 public:
6    CA();
7 };
static修饰的变量8
9 CA::CA():max(100)
10 {
11 }
4、Reference 引⽤型变量:
引⽤型变量和const变量类似。需要在创建的时候即进⾏初始化。也是在初始化列表中进⾏。但需要注意⽤Reference类型。
1 class CA
2 {
3 public:
4    int init;
5    int& counter;
6 public:
7    CA();
8 };
9
10 CA::CA(): counter(&init)
11 {
12 }
5、const static integral 变量:
对于既是const⼜是static ⽽且还是整形变量,C++是给予特权的(但是不同的编译器可能有会有不同的⽀持,VC 6好像就不⽀持)。可以直接在类的定义中初始化。short可以,但float的不可以哦。
1 // 例float类型只能在类外进⾏初始化
2 // const float CA::fmin = 3.14;
3 class CA
4 {
5 public:
6      //static const float fmin = 0.0;// only static const integral data members can be initialized within a class
7    const static int nmin = 0;
8    ……
9 public:
10    ……
11 };
总结起来,可以初始化的情况有如下四个地⽅:
1、在类的定义中进⾏的,只有const 且 static 且 integral 的变量。
2、在类的构造函数初始化列表中,包括const对象和Reference对象。
3、在类的定义之外初始化的,包括static变量。因为它是属于类的唯⼀变量。
4、普通的变量可以在构造函数的内部,通过赋值⽅式进⾏。当然这样效率不⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。