美思威尔顿酒店怎么样:一个关于静态成员变量的问题?

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/11 01:07:18
快来看看这个程序吧:
#include <iostream>
using namespace std;
class cat
{
public:
cat(int age):itsage(age){howmanycats++;}
virtual ~cat(){howmanycats--;}
virtual int getage(){return itsage;}
virtual void setage(int age){itsage=age;}
static int howmanycats;
private:
int itsage;
};
int cat::howmanycats=0;
int main()
{
const int maxcats=5;int i;
cat * cathouse[maxcats];
for(i=0;i<maxcats;i++)
cathouse[i]=new cat(i);
for(i=0;i<maxcats;i++)
{cout<<"there are";
cout<<cat::howmanycats<<endl;
cout<<cathouse[i]->getage()<<endl;
cout<<"静态成员变量:"<<cathouse[13]->howmanycats<<"..."<<endl;
delete cathouse[i];
cathouse[i]=0;
}
return 0;
}
问题是cout<<"静态成员变量:"<<cathouse[13]->howmanycats<<"..."<<endl;
这一句,我用超过数组上限的指针指向静态成员变量却仍能正确输出静态成员变量的值,这是为什么?

呵呵,这位兄弟一定没有好好看C++的书.

静态成员变量是编译时刻就已经定下的,是跟随类编译而被编译的,在对象还没有生成的时候,它就已经存在了,初值是0.后来你的小猫窝里放了小猫(生成了对象,并且改变了这个值),而C++又不管数组是否越界,所以你的cathouse[13]实际上cat类的指针cat*,这样它自然可以指向这个所有对象共享的静态成员变量,因此显示值是正确的.