是面向对象语言温秀梅版书的第三章最后一题,因为自己去编写得不出答案,希望在这里可以找到答案
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
由此可以看出,后定义的类对象会先被析构
现在事情明了了,我们最后理一遍程序执行的顺序- 定义对象t1、t2,且:t1.i = 22; t1.j = 11; t2.i = 20; t2.j = 10;
- 分别输出t1、t2的i、j
- 逐个析构t2、t1
由此可以推导出输出内容如下:
Constructing 22 11 Constructing 20 10 display:22 11 display:20 10 Destructing20 10 Destructing22 11
你可能会疑惑:输出内容当中的“Destructing”后面都不跟空格吗?至少我没在书中找到Destructing后面有空格
以上本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 单片机学习顺序问题!!
- ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
- ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
- ¥15 相敏解调 matlab
- ¥15 求lingo代码和思路
- ¥15 公交车和无人机协同运输
- ¥15 stm32代码移植没反应
- ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
- ¥100 连续两帧图像高速减法
- ¥15 如何绘制动力学系统的相图