static 的作用
来源:互联网 发布:互盾苹果数据恢复软件 编辑:程序博客网 时间:2024/06/07 00:35
对于一个完整的程序,在内存中的分布情况如下图:
代码区 //low address 全局数据区 堆区 栈区 //high address
1、全局变量和全局静态变量的区别, example:
#include <iostream.h>void fn();int n; //定义静态全局变量void main(){ n=20;cout<<n<<endl;fn();}
//File2#include <iostream.h>extern int n;void fn(){ n++;cout<<n<<endl;}
把int n改为static int n,测试。 这就是静态全局变量与全局变量的区别。
2、 静态局部变量(全局数据区分配内存,其作用域为局部作用域)
注意:
如果变量没有被显示初始化,那么,在函数体内声明的自动变量的值时随机的,在函数体外声明的自动变量的被初始化为0;
静态初始变量都被初始化为0;
3、静态函数
静态函数不能被其它文件所用; 其它文件中可以定义相同名字的函数,不会发生冲突;
二、面向对象的static关键字
1、静态数据成员定义时要分配空间,所以不能在类声明中定义。
初始化: int A::i = 10;
访问方式: A a; a.i; 或 A::i;
静态数据成员主要用在各个对象都有相同的某项属性的时候。比如对于一个存款类,每个实例的利息都是相同的。所以,应该把利息设为存款类的静态数据成员。这 有两个好处,第一,不管定义多少个存款类对象,利息数据成员都共享分配在全局数据区的内存,所以节省存储空间。第二,一旦利息需要改变时,只要改变一次, 则所有存款类对象的利息全改变过来了;
静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性; 可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能;
2,静态成员函数
但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指 针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数
出现在类体外的函数定义不能指定关键字static;
调用静态成员函数: A a; a.getX(); 或 A::getX();
它被用来控制变量的存储方式和可见性
它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声明;二是类定义的内部实现,那里有类的成员函数定义;三是应用程序的main()函数前的全局数据声明和定义处。
不能将静态成员函数定义为虚函数
还有几项注意事项。
- 关键字static的作用
- static的作用
- static的作用
- static的作用
- static的作用
- static 的作用
- static的作用
- static的作用总结
- 关键字static的作用
- static的作用
- static关键字的作用
- static的作用
- static的作用
- static的作用
- Static 的作用
- static关键字的作用
- Java Static的作用
- static关键字的作用
- 【总结备用】Android 常用权限一览
- 关于HANA简单介绍
- 面试时如何回答为何离开老东家
- word2007去掉页眉横线的方法
- 今天看见虎姐写的关于生成并发唯一性流水号的解决方案
- static 的作用
- 第一个Iphone项目的30条心得
- 从xml文档中读取数据并插入mysql数据库中
- 清除WORD2007的密码
- 过几天要考试了~~
- 动态链接库的静态链接导致程序的DLL劫持漏洞-借助QQ程序xGraphic32.dll描述
- MSSQLSERVER服务启动后又停止了
- 传智播客学习笔记05
- matlab排序