面向对象的static
静态数据成员:在类内数据成员的声明前加static,即声明类内静态数据成员。
- 非静态成员每个对象都有自己的拷贝。而静态数据成员在程序中只有一份拷贝,由该类的所有对象共享。但其不属于特定的类,在没有任何类实例时就可以操纵它。
- 存储在全局数据区。由于定义时要分配空间,所以不能在类声明中初始化。在类外初始化,初始化时不需要再加static关键字。格式为: :: =
- 虽然同样遵循public、protected、private的访问权限,但不能在类外被访问。访问静态成员有两种格式:.;如果静态成员为public,可以::
- 静态数据成员主要用在各个对象都有相同的某项属性时。一是可以节省存储空间,二是在需要修改时,只需要修改一处即可。比如存款类中的利息。
- 同全局变量相比,静态数据成员有两个好处。一是没有进入程序的全局命名空间,不会和其他全局变量造成冲突;二是可以实现信息隐藏,可以定义为private,而全局变量不能。
静态成员函数
与静态数据成员类似,静态成员函数不是为类中某个具体的对象服务,是为类的全部服务。
- 普通成员函数内部缺省的隐藏了指向对象本身的this指针,而静态成员函数没有this指针。因此它不能访问类对象的非静态数据成员和非静态成员函数,只能调用静态成员函数。
- 静态成员之间可以互相访问,包括静态数据成员和静态成员函数。
- 由于没有this指针的额外开销,其速度与类的全局函数相比有少许提升。
- 类的对象可以用.或->直接调用静态成员函数,也可以在没有类对象时访问:::()