静态成员变量,他是同一个类所有对象共有的,所以,即使有很多个不同的对象,他们共享一份静态成员变量。
好处,一方面可以节省内存,因为只需要一份,而不是多份。
另一方面,由于多个对象共享一份,方便他们之间的通信。比如说,为了统计同一个类到底有多少个对象,我们可以
设置一个静态成员变量: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文件里比较合适。