关于C++问题,下面的程序输出结果为0,我想问一下问什么不是3,析构函数不是要在主函数之后才运行吗

主函数输出之后就应该是3,析构函数调用n变成0,但是没有输出了啊,求解答,还有static有什么作用,为什么去掉之后程序出现错误

#include"iostream.h"
class test
{
public:
test()
{
n+=2;
}
~test()
{
n-=3;
}

static int num()
{
return n;
}

private :

static int n;
};
int test::n=1;
int main()
{
test *p=new test;
delete p;
cout<<"n="<<test::num()<<endl;
return 0;
}

第1个回答  2012-03-22
首先 n被赋值为1 调用构造函数的时候+2 于是n=3 析构函数的时候-3
所以main 函数输出的是0
static 是静态,就是说,就算你没有建立对象,这个n 还是存在的。
水平有限,不知是否解释清楚了
第2个回答  2012-03-22
int test::n=1;
int main()
{
test *p=new test;//调用构造函数 n=1+2=3
delete p;//调用析构函数n=3-3=0
cout<<"n="<<test::num()<<endl;//num返回0
return 0;
}

至于说static有什么作用,static成员变量在程序中只存在一份,在类的实例创建之前就存在,类的实例销毁之后也依然存在。本回答被提问者采纳
相似回答