静态成员变量,他是同一个类所有对象共有的,所以,即使有很多个不同的对象,他们共享一份静态成员变量。

好处,一方面可以节省内存,因为只需要一份,而不是多份。

另一方面,由于多个对象共享一份,方便他们之间的通信。比如说,为了统计同一个类到底有多少个对象,我们可以

设置一个静态成员变量:static int num;

num初始化为0,以后,没一个对象构造的时候,都将num增加1,析构的时候减1,这样就可以知道到底有多少个类的

对象了。

 

静态成员变量必须先初始化,然后才能使用。实际上,初始化不仅仅包含了初始化,还包含了给他分配内存这个功能。

以下我遇到的一个例子 :

头文件:
class test  
{
public:
    void print();
    static void initial();
    static int a;
    test();
    virtual ~test();

};

我在initial中对他进行初始化。

cpp文件:

 


#include "test.h"
#include <iostream.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

int test::a=1;

test::test()
{

}

test::~test()
{

}


void test::initial()
{
    test::a=1;
}


void test::print()
{
    cout<<endl<<test::a<<endl;
}


main函数所在cpp:



#include "test.h"



void main()
{
    test t;
  //  t.initial();
    t.print();
}


刚开始的时候,没有加上 int test::a=1;结果总是出现链接错误。我以为是因为忘了在main函数里用t.initial();进行初始化,所以我把t.initial(); 加进来了,但是还是出问题。后来把 int test::a=1;加上以后就好了。所以,在initial里我期望进行的初始化,只是进行赋初值,并没有能够给a分配内存,所以 int test::a=1;是必不可少的。

还有就是 int test::a=1;的位置的问题了。放在头文件里肯定不行,因为头文件可能被包含多次,也就导致了 int test::a=1;被执行多次。由于a对于test类来说,只有一份备份,执行多次必然会造成重复。所以放在test类的cpp文件里比较合适。

 

 posted on 2008-07-23 11:16  甘赛世  阅读(129)  评论(0)    收藏  举报