对于类的静态成员变量,只有static const int类型和 enum 类型能在类里面初始化,其他只能在.cpp里初始化,但不能在类体内初始化,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。
静态成员函数和静态变量在类体外初始化时,无须加static关键字,否则是错误的。
静态变量不参与sizeof计算
静态成员仍然遵循public,private,protected访问准则。
静态成员函数只能调用静态变量,因为没有this指针
非静态成员函数可以任意地访问静态成员函数和静态数据成员。
静态成员函数不能声明为虚函数
静态成员函数与成员函数同名同参数,也就是静态和非静态函数不能重载,否则编译器不知调用哪个
举例:
// 头文件
class Obj
{
private:
Obj() {}
static Obj* instance;
public:
static Obj* getInstance();
static const int n = 12;
static int n;
};
//源文件
Obj* Obj::instance=0; //类外定义
int Obj::n = 4; //类外定义
Obj* Obj::getInstance()
{
if(!instance)
{
instance = new Obj();
}
return instance;
}