static关键字

来源:互联网 发布:php array key 编辑:程序博客网 时间:2024/06/09 17:02

面向过程设计中的static

1、静态全局变量
a 该变量在全局数据区分配内存;
b 未经初始化的静态全局变量会被程序自动初始化为0;
c 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的,其它文件中可以定义相同名字的变量,不会发生冲突。
2、静态局部变量
该变量在全局数据区分配内存;
在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;每次的值保持到下一次调用,直到下次赋新值;
一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
3、静态函数
a 它只能在声明它的文件当中可见,不能被其它文件使用。其它文件中可以定义相同名字的函数,不会发生冲突。

面向对象的static关键字(类中的static关键字)

1、静态数据成员
a 静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它
静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。语句int Myclass::Sum=0;是定义静态数据成员;
静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性;可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能;
2、静态成员函数
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
b 非静态成员函数可以任意地访问静态成员函数和静态数据成员;
c 静态成员函数不能访问非静态成员函数和非静态数据成员;
d 由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

原创粉丝点击