第一章 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修饰的成员函数的吧:

由于没有将类实例化,因此采取了类名::静态成员函数名(参数列表)的形式来使用静态成员函数。

 

posted @ 2014-12-01 23:09  鱼跃与渊  阅读(172)  评论(0编辑  收藏  举报