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