在C++语音中类的静态数据成员在初始化时比较特殊,以为它并不是在类的定义中初始化,而是在类的定义外被初始化。如下示例:
另外,一个类中的静态变量是被所有类对象所共有的,所以无论定义多少个类对象,静态数据成员只有一份。同时,如果一个对象修改了静态数据变量,其他对象的数据数据成员(其实是一个静态数据成员)也将改变。如上例中 test1.getname(),两次的值不一样。
<pre name="code" class="html">#include"iostream"
#include"string.h"
class test
{
public:
static char strStaticname[10];
static int buf;
test()
{
}
test(char *strname)
{
strcpy_s(strStaticname, strname);
}
test(char *strname, int num)
{
printf("XXOO\n");
}
char *getname()
{
return strStaticname;
}
int getbuffer()
{
return buf;
}
};
char test::strStaticname[10] = "东方不败";//类静态变量在外部赋值
int test::buf = 1;
int main(int arc, char *argv[])
{
printf("创建带参数 张无忌\n");
test test1("张无忌");
printf("获取类test1名字 :%s\n", test1.getname());
printf("创建不带参数\n");
test test2("李寻欢");
printf("获取类test2名字 :%s\n", test2.getname());
printf("获取不带参数类数据buf=%d\n", test2.getbuffer());
test test3("乔峰", 1);
printf("获取类test1名字 :%s\n", test1.getname());
}
另外,一个类中的静态变量是被所有类对象所共有的,所以无论定义多少个类对象,静态数据成员只有一份。同时,如果一个对象修改了静态数据变量,其他对象的数据数据成员(其实是一个静态数据成员)也将改变。如上例中 test1.getname(),两次的值不一样。