你好,很高兴能回答你的问题。
首先我们先来看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后面有空格
以上