C++程序解答,看不懂,求大神解释

#include<iostream>usingnamespacestd;classtest{public:test(){n+=2;}~test(){n-=3;}stati... #include<iostream>
using namespace std;
class test{
public:
test(){n+=2;}
~test(){n-=3;}
static int getnum(){return n;}
private:
static int n;
};
int test::n=1;
int main()
{
test*p=new test;
delete p;
cout<<"n="<<test::getnum()<<endl;
return 0;
}
最好能逐行注释,为什么运行结果是n=0啊?
展开
 我来答
小智档案报到证
2012-07-05 · 我是一个志愿者,帮助你做好毕业离校准备
小智档案报到证
采纳数:224 获赞数:755

向TA提问 私信TA
展开全部
哇咔咔 简单:
#include<iostream> //头文件就不用说了

using namespace std; //std命名空间

class test{ //开始定义类

public:
test(){n+=2;} //构造函数 对象创建的时候调用的函数

~test(){n-=3;} //析构函数 对象消亡的时候调用的函数

static int getnum(){return n;} //该函数返回成员变量n的值

private:
static int n; //成员变量 n

};
int test::n=1; //因为成员变量n是static类型的,该类型的变量属于类不属于对象,初始化只能全局初始化,这里实现的就是初始化n

int main()//程序从这个函数进入 从这个函数退出

{
test*p=new test; //生成了一个test对象p 这里会调用上述的构造函数,因此现在n的值是2+1=3了

delete p; //删除对象p 这里回调用上述的析构函数,因此现在的n值是3-3=0

cout<<"n="<<test::getnum()<<endl; //得到n的值是n=0

return 0;
}
不懂再问
xiarl
2012-07-05 · TA获得超过1460个赞
知道小有建树答主
回答量:884
采纳率:85%
帮助的人:252万
展开全部
上面3~10行,定义了个类,其中有个静态属性n,并有个静态方法可以取得类的这个属性值。
从5行的构造函数和6行的析构函数看,是每创建一个对象,n值加2,每析构一个减3.
main上面一行是给test的这个静态属性赋值为1.
运行结果,n初始化为1,构造时(new)加2成3,析构时(delete)减3得0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b45dd13
2012-07-05 · TA获得超过588个赞
知道小有建树答主
回答量:910
采纳率:0%
帮助的人:320万
展开全部
#include<iostream>
using namespace std;
class test{
public:
test(){n+=2;}//构造函数
~test(){n-=3;}
static int getnum(){return n;}
private:
static int n;
};
int test::n=1;
int main()
{
test*p=new test;//创建一个指针对象,运行构造函数n+=2,即n=1+2=3.
delete p;//删除指针对象,运行析构函数n-=3,即:n=3-3=0
cout<<"n="<<test::getnum()<<endl;//对象已经没有了。但是有类,类可以访问自己的静态函数,输出n=0
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
terranlong
2012-07-05 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3991万
展开全部
#include<iostream>
using namespace std;
class test
{
public:
test(){n+=2;}
~test(){n-=3;}
static int getnum(){return n;}
private:
static int n; // 静态成员变量
};
int test::n=1; // 初始化静态变量为1
int main()
{
test*p=new test; // test类指针new一个test类对象,调用构造函数,n+=2,得到n=3
delete p; // delete了刚new的对象,调用析构函数,n-=3,得到n=0
cout<<"n="<<test::getnum()<<endl; // 调用test类getnum()函数,打印n=0
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kingfeng588
2012-07-05 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1807万
展开全部
int main()
{
test*p=new test;
delete p;// 这里把指针释放了,所以test::n被清除,默认为0。
cout<<"n="<<test::getnum()<<endl;// 所以这里输出为0

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式