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成员变量

[cpp] view plaincopyprint?
  1. 例1:/*静态数据成员相关的操作有三个分别是声明、定义与初始化 
  2. 声明:说明这个类中有这样一个成员,但是不分配空间(1) 
  3. 定义:分成员开辟内存空间,静态成员的空间在静态成员区,和类的其它成员不在一起(2) 
  4. 初始化化:为它定义一个初值(4) 
  5. 对于static数据成员: 
  6. 声明在函数体内,定义和初始化要在函数体外,定义和初始化常常放在一句话里(3) 
  7. (2)和(3)不能同时出现*/  
  8. class A  
  9. {  
  10. public:  
  11.     static int x;//(1)  
  12. };  
  13. int A::x;//(2)  
  14. int A::x = 2;//(3)  
  15. int main()  
  16. {  
  17.     A::x = 2;//(4)   
  18.     return 0;  
  19. }  


3.static成员常量

[cpp] view plaincopyprint?
  1. 例2:/*对于const static数据成员,情况比较特殊 
  2. 声明在函数体内,定义在函数体外,但是初始化可以在函数体内或外都可以 
  3. 注意(1),const在声明和定义时都要出现,而static只在声明的时候出现 
  4. 如果在函数体外初始化,和前一个例子相同,下面程序是在函数体内定义的情况 
  5. 注意(2)千万不在把定义少了*/  
  6. class A  
  7. {  
  8. public:  
  9.     const static int x = 2;//声明和初始化在一起  
  10. };  
  11. const int A::x;//定义  
  12. int main()  
  13. {  
  14. //  A::x = 2;//(4)   
  15.     return 0;  
  16. }  


4.不管是2还是3,声明、定义不可少

少了声明,会出现链接错误

少了定义,会没有分配空间

少了初始化,默认初始化为0

5.非static数据成员不能用作默认实参

例3:

[cpp] view plaincopyprint?
  1. class A  
  2. {  
  3. public:  
  4.     static int x;  
  5.     int y;  
  6.     void Test1(int para = x){}//正确  
  7.     void Test2(int para = y){}//错误  
  8. };  
  9. int A::x = 2;//定义  



 6.静态数据成员在没有对象之前就存在

 

7.静态成员函数不能被说明为虚函数

0 0