定义方式:
static 类型名 变量名;//静态成员变量
static 类型名 函数名(){ };//静态成员函数
基本概念:
- 普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象(包括其他类的对象)共享。sizeof 运算符不计算静态成员变量的大小。
- 普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。
- 静态成员不需要通过对象就能访问。
- 静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在。
- 静态成员函数本质上是全局函数。
- 设置静态成员这种机制的目的是将和某些类紧密相关的变量和函数写到类里面,看上去像是一个整体,易于维护和理解。
访问方式:
1)类名::成员名
2)对象名.成员名//这里的对象可以是随意的任何一个,但要知道静态成员并不属于这个对象
3)指针->成员名//这里的指针是类的指针
4)引用.成员名//相当于2
注意事项:
- 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数。
- 若是在类的析构函数和普通构造函数中都有对静态成员变量或是静态成员函数的操作,一定要重新写一个类得到复制构造函数,否则在调用复制构造函数时会导致数据的错误。
- 类成员的可访问范围,如:public、private和protect对静态成员也有效果。
- 必须在定义类的文件中对静态成员变量进行一次说明或初始化。