一道程序代码难题求大佬解答 5

给出下列代码,输出结果截图,并说明。注意,本题,每个输出结果逐一说明原因,重在原因说明#include<iostream>usingnamespacestd;classT... 给出下列代码,输出结果截图,并说明。注意,本题,每个输出结果逐一说明原因,重在原因说明

#include<iostream>

using namespace std;

class Test

{private:

int id;

public:

Test(int i=0):id(i)

{cout<<id<<" cons called"<<endl;}

~Test()

{cout<<id<<" des called"<<endl;}

}t0;

void create()

{

Test t3(3);

static Test t4(4);

}

int main()

{

Test t1(1);

static Test t2(2);

Test *pt=new Test(5);

create();

delete pt;

Test t6(6);

return 0;
}
展开
 我来答
百度网友071fe12
2020-03-23 · 超过11用户采纳过TA的回答
知道答主
回答量:71
采纳率:100%
帮助的人:16.9万
展开全部

1、全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。

2、局部对象,当对象生成时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。

3 、静态(static)对象,当对象生成时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。

4、以new方式产生出来的局部对象,当对象生成时其构造函数被执行,析构函数则在对象被delete时执行时执行

结果


  • t0是全局对象,先调用构造函数,因为没设定参数,默认为0,调用构造函数,输出0 cons called

  • 接着到main函数里,定义t1(1),调用构造函数,输出1 cons called

  • 接着定义t2(2)输出2 cons called,*pt(5)输出5 cons called

  • 进入creat函数,分别输出3 cons called,4 cons called。

  • 结束creat函数,调用t3的析构函数,输出3 des called。t4是静态对象,结束时调用析构

  • 删掉Pt,调用其析构,输出5 des called

  • 输出6 cons called

  • 结束main函数,分别调用内部局部对象的析构6 des called,1 des called。(从下到上)

  • 然后调用静态对象的析构函数,(也是从下到上),输出4 des called,2 des called

  • 最后调用全局变量的析构函数输出 0 des called

  • 结束程序

顺便说一句,百度的知道的这个回答框的编辑功能太差了。我看百度也没咋维护这个产品。

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式