C++成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:
a. 常量型成员变量
b. 引用型成员变量
c. 静态成员变量
d. 整型静态常量成员变量
e. 非整型静态常量成员变量
对于常量型成员变量和引用型成员变量的初始化,需要通过构造函数初始化列表的方式进行。不能在构造函数体内给常量型成员变量和引用型成员变量赋值。
class Test
{
private:
int i; // 普通成员变量
const int ci; // 常量成员变量
int &ri; // 引用成员变量
static int si; // 静态成员变量
// static int si2 = 100; // error: 只有静态常量成员变量,才可以这样初始化
static const int csi; // 静态常量成员变量
static const int csi2 = 100; // 静态常量成员变量的初始化(Integral type)
static const double csd; // 静态常量成员变量(non-Integral type)
// static const double csd2 = 99.9; // error: 只有静态常量整型数据成员才可以在类中初始化
};
我们在通过实例还说明一下:
<span style="color: rgb(17, 17, 17); font-size: 13px; line-height: 21.0599994659424px; white-space: pre-wrap;">Test.h文件</span>
<span style="color: rgb(17, 17, 17); font-size: 13px; line-height: 21.0599994659424px; white-space: pre-wrap;"><span style="color: rgb(17, 17, 17); font-size: 13px; line-height: 21.0599994659424px; white-space: pre-wrap;">#pragma once</span>
</span>
class Test
{
private :
int m_var1;
// int m_var11= 4; //错误的初始化方法
const int m_var2 ;
// const int m_var22 =22222; //错误的初始化方法
static int m_var3;
// static int m_var3333=33333; //错误,只有静态常量成员才能直接赋值来初始化
static const int m_var4=4444; //正确,静态常量成员可以直接初始化
static const int m_var44;
public:
Test(void);
~Test(void);
};
Test.cpp
<span style="color: rgb(17, 17, 17); font-size: 13px; line-height: 21.0599994659424px; white-space: pre-wrap;">#include "test.h"</span>
<span style="color: rgb(17, 17, 17); font-size: 13px; line-height: 21.0599994659424px; white-space: pre-wrap;">int Test::m_var3 = 3333333;<span style="white-space:pre"> </span>//静态成员的 正确的初始化方法
// int Test::m_var1 = 11111;;<span style="white-space:pre"> </span>//错误 静态成员才能初始化
// int Test::m_var2 = 22222;<span style="white-space:pre"> </span>//错误
// int Test::m_var44 = 44444;<span style="white-space:pre"> </span>//错误的方法,提示重定义
Test::Test(void) :m_var1(11111),m_var2(22222) //正确的初始化方法 , m_var3(33333) 不能在这里初始化
{
<span style="white-space:pre"> </span>m_var1 =11111; //正确, 普通变量也可以在这里初始化
<span style="white-space:pre"> </span>//m_var2 = 222222; 错误,因为常量不能赋值,只能在 构造函数的初始化列表” 那里初始化
}
</span>