C和C++中static作用详解
2013-03-31 17:16
197 查看
C中static的作用大致三种:
首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。
分开来说:
(1)隐藏。这点主要针对静态全局变量和静态函数。对于非静态全局变量的作用域是整个源程序(可能包含多个文件),而静态全局变量则将其作用域限定在本文件内。同理,静态函数也将其作用域限定在本文件内。利用static实现了变量名和函数名的隐藏,从而其他文件内可以有同名函数或变量而不互相影响。static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
(2)持久性。主要针对静态局部变量,把局部变量改变为静态变量后,存储到静态存储区,即改变了它的生存期,作用域不变。static局部变量只被初始化一次。
(3)默认初始化为0。因为全局变量本来默认初始化为0,所以主要针对静态局部变量。
C++中static作用:
除了在面向过程设计中兼容C中特性外,C++中增加的含义体现在面向对象程序设计时,此时static表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。具体的情况为:
(1)类的静态成员变量
在cpp中必须对它进行初始化,如
如果变量被声明为static,对象将只在执行线程第一次到达它的定义并初始化。
输出为:6 21 21
(2)类的静态函数
实现的时候也不需要static的修饰;类的静态函数是在该类的范畴内的全局函数,只能访问类的静态成员(变量和函数),不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数。
首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。
分开来说:
(1)隐藏。这点主要针对静态全局变量和静态函数。对于非静态全局变量的作用域是整个源程序(可能包含多个文件),而静态全局变量则将其作用域限定在本文件内。同理,静态函数也将其作用域限定在本文件内。利用static实现了变量名和函数名的隐藏,从而其他文件内可以有同名函数或变量而不互相影响。static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
(2)持久性。主要针对静态局部变量,把局部变量改变为静态变量后,存储到静态存储区,即改变了它的生存期,作用域不变。static局部变量只被初始化一次。
(3)默认初始化为0。因为全局变量本来默认初始化为0,所以主要针对静态局部变量。
C++中static作用:
除了在面向过程设计中兼容C中特性外,C++中增加的含义体现在面向对象程序设计时,此时static表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。具体的情况为:
(1)类的静态成员变量
在cpp中必须对它进行初始化,如
int Myclass::sum = 0; //初始化静态数据成员,注意该处没有static
如果变量被声明为static,对象将只在执行线程第一次到达它的定义并初始化。
//oop.h #include<iostream> using namespace std; class Myclass { private: int a , b , c; static int sum; //声明静态数据成员 public: Myclass(int a , int b , int c); void GetSum(); }; //oop.cpp #include "oop.h" int Myclass::sum = 0; //定义并初始化静态数据成员 Myclass::Myclass(int a , int b , int c) { this->a = a; this->b = b; this->c = c; sum += a+b+c; } void Myclass::GetSum() { cout<<"sum="<<sum<<endl; } int main(void) { Myclass M(1 , 2 , 3); M.GetSum(); Myclass N(4 , 5 , 6); N.GetSum(); M.GetSum(); getchar(); return 0; }
输出为:6 21 21
(2)类的静态函数
实现的时候也不需要static的修饰;类的静态函数是在该类的范畴内的全局函数,只能访问类的静态成员(变量和函数),不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数。
相关文章推荐
- static作用(修饰函数、局部变量、全局变量) C/C++中static关键字详解
- C++中static、const、static const修饰变量作用详解
- C++中static、const、static const修饰变量作用详解(转)
- 详解C/C++语言中Static 变量 或者 static函数的作用
- static关键字在C/C++中的作用(详解)
- C++中static、const、static const修饰变量作用详解
- java中static作用详解
- C/C++static关键字详解
- C/C++中static关键字详解
- c++中static关键词的三种作用
- c++中关键字static在普通变量及函数详解及实例运行答案
- C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间
- static(用于类成员)的作用详解
- C/C++中static关键字作用
- C++ 匿名namespace的作用以及它与static的区别
- C++中static关键字详解
- java中static作用详解
- C++中Static作用和使用方法
- C/C++中作用域详解
- [程序员面试题]C/C++中static的作用