每个类只有一个存储单元,静态数据成员为该类的所有对象共有,不属于某个对象。静态数据成员的初始化必须在类以外进行定义性说明。
形式为:<类型> <类名>::<静态数据成员> =值
静态成员注意以下几点:
1、静态成员必须初始化,如果其是有公共访问属性的可以通过对象重新设置值,其最终值以最后一次设置的为准。
2、初始化方式只能是在类以外进行定义性说明
3、访问方式可以是对象.静态成员或ClassName::静态数据成员
通过下面的例子来理解定义:
1. 包含静态数据成员的类定义头文件代码如下
#ifndef SINGLETON_H
#define SINGLETON_H
#include <QObject>
#include <QString>
#include <QDebug>
class Singleton
{
private:
static Singleton *Instance;
QString _name;
public:
static int Test;
static Singleton *createInstance(){
if(Instance == NULL){
Instance = new Singleton;
}
return Instance;
}
void setName(QString name){
_name = name;
}
QString getName(){
return _name;
}
private:
Singleton(){
qDebug() << "construct";
Test = 1;
}
};
#endif // SINGLETON_H
2. 对应的Cpp文件代码
#include "singleton.h"
int Singleton::Test = 1; // 对静态数据成员的初始化操作要在类外进行
Singleton* Singleton::Instance = NULL;
3. 使用对应的含有静态数据成员的类代码
Singleton *S1 = Singleton::createInstance();
Singleton *S2 = Singleton::createInstance();
Singleton *S3 = Singleton::createInstance();
Singleton *S4 = Singleton::createInstance();