如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干。但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享。
可以使用全局变量,但用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,因此在实际开发中很少使用全局变量。
静态变量
对于类的静态成员变量,只有static const int类型和 enum 类型能在类里面初始化,其他只能在.cpp里初始化,但不能在类体内初始化,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。
静态成员函数和静态变量在类体外初始化时,无须加static关键字,否则是错误的。
static成员变量的内存空间是在初始化时分配,程序结束才释放,跟类对象的销毁无关。
静态变量不参与sizeof计算,因为它不占用对象的内存
静态成员仍然遵循public,private,protected访问准则。
静态函数
静态成员函数只能调用静态变量,因为没有this指针。 设计它的初衷是把类名当成namespace用,控制类内的static变量。
静态成员函数仍然遵循访问等级,但最好是public,否则不能直接用
类名::
调用非静态成员函数可以任意地访问静态成员函数和静态数据成员。
静态成员函数不能声明为虚函数,编译直接报错
静态成员函数与成员函数不能同名同参数,也就是静态和非静态函数不能重载,否则编译器不知调用哪个
举例:1
2
3
4
5
6
7
8
9
10
11
12// 头文件
class Obj
{
private:
Obj() {}
static Obj* instance;
public:
static Obj* getInstance();
static const int n = 12;
static int n;
};
1 | //源文件 |