(1)类里面的任何成员变量在类定义时是不能初始化的。
类的定义实际相当与类型声明,并没有分配存储空间,初始化的数据哪里放? 类实例化以后才会有实体存储地址及空间。当用类构造对象的时候首先分配内存然后调用构造函数,这时候才可以初始化非静态成员变量.
静态成员变量定义的时候在静态存储区中就分配了内存所以可以初始化
(2)一般的数据成员可以在构造函数中初始化。(构造初始化列表初始化和构造函数体内赋值初始化)
(3)const数据成员必须在构造函数的初始化列表中初始化。(道理很简单,const成员第一次数据初始化就是发生在类构造数据初始化时,一旦过了此时就会出现问题)。
(4)static在类的定义外面初始化。
(5)数组成员是不能在初始化列表里初始化的。
-----------------Test.h----------------------------
#pragma once
class Test
{
private :
int var1;
//int var11= 4; 错误的初始化方法-2、成员变量在定义时不能初始化
const int var2 ;
//const int var22 =22222; 错误的初始化方法-3、const数据成员必须在构造函数的初始化列表中初始化
static int var3;
//static int var3333=33333; 错误-只有静态常量成员才能直接赋值来初始化
static const int var4=4444; //正确,静态常量成员可以直接初始化
static const int var44;
public:
Test(void);
~Test(void);
};
--------------------Test.cpp-----------------------------------
#include ".\test.h"
int Test::var3 = 3333333; //正确-4、static可在类的定义外面初始化
//int Test::var1 = 11111; 错误-只有静态成员才能在类的外面初始化
Test::Test(void) :var1(11111),var2(22222) //正确;但var3(33333) 不能在这里初始化
{
var1 =11111; //正确, 普通变量可以在这里初始化
//var2 = 222222; 错误-3、const数据成员必须在构造函数的初始化列表中初始化
var3 =44444; //这个是赋值,值会影响到其它实例
}
Test::~Test(void)
{
}