static总结
来源:互联网 发布:linux nas 解决方案 编辑:程序博客网 时间:2024/05/21 21:40
一、不在类中的static的使用
1.作用
1.局部变量被申明为static,表示这个函数结束的时候这个的值不变。
2.外部变量被申明为static表明它是一个本地全局变量。改变量只能在该文件内被访问,不能被其它文件访问。
2.Static与非static的区别
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
二、类中的static的使用
1.static成员函数
(1)关键字static只在类的定义体内部出现(与const不同,与friend相同)
(2)没有this指针
(3)不能被声明为const或virtual
2.static成员变量
- 例1:/*静态数据成员相关的操作有三个分别是声明、定义与初始化
- 声明:说明这个类中有这样一个成员,但是不分配空间(1)
- 定义:分成员开辟内存空间,静态成员的空间在静态成员区,和类的其它成员不在一起(2)
- 初始化化:为它定义一个初值(4)
- 对于static数据成员:
- 声明在函数体内,定义和初始化要在函数体外,定义和初始化常常放在一句话里(3)
- (2)和(3)不能同时出现*/
- class A
- {
- public:
- static int x;//(1)
- };
- int A::x;//(2)
- int A::x = 2;//(3)
- int main()
- {
- A::x = 2;//(4)
- return 0;
- }
例1:/*静态数据成员相关的操作有三个分别是声明、定义与初始化声明:说明这个类中有这样一个成员,但是不分配空间(1)定义:分成员开辟内存空间,静态成员的空间在静态成员区,和类的其它成员不在一起(2)初始化化:为它定义一个初值(4)对于static数据成员:声明在函数体内,定义和初始化要在函数体外,定义和初始化常常放在一句话里(3)(2)和(3)不能同时出现*/class A{public:static int x;//(1)};int A::x;//(2)int A::x = 2;//(3)int main(){A::x = 2;//(4)return 0;}
3.static成员常量
- 例2:/*对于const static数据成员,情况比较特殊
- 声明在函数体内,定义在函数体外,但是初始化可以在函数体内或外都可以
- 注意(1),const在声明和定义时都要出现,而static只在声明的时候出现
- 如果在函数体外初始化,和前一个例子相同,下面程序是在函数体内定义的情况
- 注意(2)千万不在把定义少了*/
- class A
- {
- public:
- const static int x = 2;//声明和初始化在一起
- };
- const int A::x;//定义
- int main()
- {
- // A::x = 2;//(4)
- return 0;
- }
例2:/*对于const static数据成员,情况比较特殊声明在函数体内,定义在函数体外,但是初始化可以在函数体内或外都可以注意(1),const在声明和定义时都要出现,而static只在声明的时候出现如果在函数体外初始化,和前一个例子相同,下面程序是在函数体内定义的情况注意(2)千万不在把定义少了*/class A{public:const static int x = 2;//声明和初始化在一起};const int A::x;//定义int main(){//A::x = 2;//(4)return 0;}
4.不管是2还是3,声明、定义不可少
少了声明,会出现链接错误
少了定义,会没有分配空间
少了初始化,默认初始化为0
5.非static数据成员不能用作默认实参
例3:
- class A
- {
- public:
- static int x;
- int y;
- void Test1(int para = x){}//正确
- void Test2(int para = y){}//错误
- };
- int A::x = 2;//定义
class A{public:static int x;int y;void Test1(int para = x){}//正确void Test2(int para = y){}//错误};int A::x = 2;//定义
6.静态数据成员在没有对象之前就存在
7.静态成员函数不能被说明为虚函数
0 0
- static总结
- static总结
- static总结
- static总结
- static 总结
- static 总结
- static 总结
- static总结
- static总结
- static总结
- static 总结
- static总结
- static总结
- static总结
- static总结
- static总结
- final、static、final static总结
- static用法总结
- ajax获取http访问状态--判断图片路径是否有效
- python学习012
- xcode6如何新建一个空项目+添加导航视图控制器
- Linux下的命令总结笔记(二)
- 如何判断一个点在三角形之外
- static总结
- Unable to execute dex: Multiple dex files define 解决方法
- proguard Missing type parameter
- 如何连接别人电脑上的ORACLE数据库
- 《道德经》是什么?
- MySQL 备份与恢复
- shell脚本在cygwin下运行报错: $'\r': command not found
- 黑马程序员——面向对象及类
- JSP运行原理和九大隐式对象(又称内置对象)的说明