代码如下,运行环境为VS2019,运行结果中划线部分系统调用的构造函数是由哪一条语句得来的呢?
头文件:
class Tdate
{
public:
Tdate(int,int,int); //构造函数
Tdate(Tdate &t); //复制构造函数
~Tdate();
void print();
private:
int year,month,day;
};
Tdate::Tdate(int a,int b,int c) //构造函数的定义
{
year=a;
month=b;
day=c;
cout<<"This is the constructor"<<endl;
}
Tdate::Tdate(Tdate &t) //复制构造函数的定义
{
year=t.year;
month=t.month;
day=t.day;
cout<<"This is the copy-constructor"<<endl;
}
Tdate::~Tdate() //析构函数的定义
{
cout<<"The year of the destructed object is "<<year<<endl;
}
void Tdate::print()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
源文件:
#include <iostream>
using namespace std;
#include "fuzhigouzaohanshu2.h"
Tdate fun(Tdate Q); //声明函数fun(),形参为对象,返回类型为对象
void main()
{
Tdate t1(2010,6,22),t2(2011,7,23); //创建对象t1,t2并初始化,系统自动调用构造函数
Tdate t3(t1); //利用对象t1初始化新对象t3,系统自动调用复制构造函数
t2=fun(t3); //通过调用函数fun重新赋值对象t2
cout<<"t2对象的数据成员为:";
t2.print();
cout<<"t3对象的数据成员为:";
t3.print();
//程序结束,系统自动调用析构函数,释放对象数组t3,t2,t1内存空间
}
Tdate fun(Tdate Q) //形参为局部变量,需要分配内存空间,根据形参类型(对象),系统自动调用复制构造函数
{
cout<<"ok\n";
Tdate t4(2012,1,24); //创建对象t4并初始化,系统自动调用构造函数
return t4;
//函数调用完成,系统自动调用析构函数,释放对象t4和形参Q的内存空间
}
运行结果: