Ctest.h
#ifndef _CTEST_H_
#define _CTEST_H_
#include <string>
#include <iostream>
using namespace std;
class Ctest
{
public:
Ctest();
~Ctest();
//1.【只有静态整形常量】
//static int a = 1; //fail 【只有静态整形常量】才能在此处初始化
static const int b = 1; //ok 【只有静态整形常量】才能在此处初始化
static int _abc; //ok 【静态整形常量】也可以在外部初始化
//static string str = "abc"; //fail 【只有静态整形常量】才能在此处初始化
//static double doubabc = 0.36; //fail 非静态整形常量,不能这样初始化
static const string str12;
//2.【常量】和【引用】只能在 构造函数的初始化列表中初始化
const int _efg; //ok 【常量】和【引用】只能在 构造函数的初始化列表中初始化
const string str34;
int &f; //OK
};
#endif
Ctest.cpp
#include "Ctest.h"
int Ctest::_abc = 100; //static 成员变量初始化 HERE
const string Ctest::str12 = "af"; //static const 成员变量初始化 HERE
Ctest::Ctest():_efg(200)//const常量只能在这里初始化
,f(_abc)
,str34("fsalk")
{
}
Ctest::~Ctest(){
}
以上例子说明了:
1.static成员变量的初始化是在类外完成。
因为static 变量属于类这个所用于,不属于任何一个对象
2.const成员变量的初始化都要在 类的初始化列表里完成。
因为.h文件中只是类的声明,类声明时候是不分配空间的。在.cpp文件中构造函数执行是才会非配内存空间,需要再分配内存空间时给他赋初值才对.
3.以上两种情况遵循不变的情况下有个例外, static const 的整形变量可以直接在声明时候就赋值。