首页 > 代码库 > 第一章 02 谈谈static关键词
第一章 02 谈谈static关键词
引文一下吧
http://blog.csdn.net/hackbuteer1/article/details/7487694
一、static在C语言中的含义
1、静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。
2、静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。(限制了访问范围)
二、c++中的扩展
2.1 static修饰成员变量
如果一个变量是类的一部分,但却不是该类的各个对象的一部分,它就被成为是一个static静态成员。一个static成员只有唯一的一份副本,而不像常 规的非static成员那样在每个对象里各有一份副本。
静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新;
理解如下:
在头文件中,声明一个类(本质上是声明了一种新的数据类型而已),并没有真正的分配你空间。仅仅是一种口头上的宣称,并没有付诸行动。
但是但是,如果在类的声明中,声明了static的成员变量,由于静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义,既然不能在类中定义,那只能是在类中声明,在类外定义了。例子如下:
class Myclass{ private: int i; int j; static int k;//在类中,仅仅是声明 public: Myclass(); }int Myclass::k = 100;//这里才是真正的定义,在全局数据区分配空间
因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;
2.2 static 修饰成员函数
同理,一个需要访问类成员,而不需要针对特定对象去调用的函数,也被称为一个static成员函 数。
类的静态成员函数只能访问类的静态成员(变量或函数)。
祖宗的杀手锏!
看看log4cplu的牛人作者是如何使用这个static修饰的成员函数的吧:
由于没有将类实例化,因此采取了类名::静态成员函数名(参数列表)的形式来使用静态成员函数。
第一章 02 谈谈static关键词