1,对于非静态数据成员,每个类对象都有自己的拷贝,而静态数据成员对每个类类型只有一个拷贝。由于静态数据成员分配在全局数据区,因此在程序开始运行时就必须存在,故静态数据成员的空间分配和初始化不可能在main函数或其他函数中完成(因而在局部类中也不允许出现静态数据成员)。这样一来,静态数据成员的空间分配和初始化只可能有以下三种途径:(a)类的头文件:这里有类的声明。但存在一个无法回避的问题:对于静态数据成员,在程序中也只能存在一个定义,而类的头文件可能被重复引用而出现重复定义;(b)main函数前的全局数据声明和定义处:这种方法也有问题,每一个使用该类的程序都必须在此处定义一下该类的静态成员,这是不现实的;(c)类定义的内部实现:这是最为理想的方式,引用时只需包含头文件即可。
2,简单变量初始化
#include <string>
class Account {
// ...
private:
static const string name;
};
const string Account::name( "Savings Account" );
3,一维数组初始化
class mydlg
{
static mychilddlg *dlgs[3];
}
static mychilddlg* mydlg::dlgs[3]={ 0 , 0 , 0 };
4,二维数组初始化
方法一:
在类里定义一个静态函数,用来初始化这个数组.在程序的初始化代码里调用这函数进行初始化
方法二:
写一个类来包装这个数组,类可以有构造函数,在构造函数里初始化