Happy boy122 2022-11-06 20:24 采纳率: 100%
浏览 14
已结题

这个程序结果是什么?

img

是面向对象语言温秀梅版书的第三章最后一题,因为自己去编写得不出答案,希望在这里可以找到答案

  • 写回答

1条回答 默认 最新

  • QuXiangrong 2022-11-07 12:12
    关注

    你好,很高兴能回答你的问题。
    首先我们先来看Tx类,他声明了三个方法——构造方法、析构方法和display方法。
    其中:
    构造方法需要用户传入两个参数,分别存入Tx类当中的i、j。有一点需要注意,我们来看你上传的图片当中的一行代码:

    Tx::Tx(int i,int j=10)
    

    这意味这在新建类对象时不一定要传入参数j,如果没传,则参数j默认为10
    现在,我们顺便看一下main函数中的两行代码

    Tx t1(22,11);
    Tx t2(20);
    

    由此可以看出此时:

    t1.i = 22;  t1.j = 11;
    t2.i = 20;  t2.j = 10;        //j值默认为十
    

    接下来看看display方法,他的作用很简单,就是输出类当中的i,j
    再看看析构方法,他会在析构前也输出i,j
    好的,解决完函数内容,现在还有个棘手的问题:这里有两个类,t1和t2,他们那个会先被析构呢?
    遇事不决,自己动手做实验先
    于是我写了以下代码:

    #include<iostream>
    
    using namespace std;
    
    class testClass
    {
        public:
            testClass(int);                //构造函数
            ~testClass();                //析构函数
        private:
            int id;                        //用于查看是哪个类
    };
    
    testClass::testClass(int var_id)
    {
        id = var_id;
        cout<<"Construct "<<id<<endl;                //输出id 
    }
    
    testClass::~testClass()
    {
        cout<<"Destruct "<<id<<endl;                //输出id 
    }
    
    int main()
    {
        testClass a(1);
        testClass b(2);
        testClass c(3);
        /*main函数结束后会自动析构*/
    }
    

    编译运行,输出:

    Construct 1
    Construct 2
    Construct 3
    Destruct 3
    Destruct 2
    Destruct 1
    

    由此可以看出,后定义的类对象会先被析构
    现在事情明了了,我们最后理一遍程序执行的顺序

    1. 定义对象t1、t2,且:t1.i = 22; t1.j = 11; t2.i = 20; t2.j = 10;
    2. 分别输出t1、t2的i、j
    3. 逐个析构t2、t1

    由此可以推导出输出内容如下:

    Constructing 22 11
    Constructing 20 10
    display:22 11
    display:20 10
    Destructing20 10
    Destructing22 11
    

    你可能会疑惑:输出内容当中的“Destructing”后面都不跟空格吗?至少我没在书中找到Destructing后面有空格
    以上

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图