作者 代码修行
单位 湖南工程学院计算机与通信学院
实现普通构造函数、复制构造函数、析构函数,观察它们的执行时机。
根据类CTest的声明以及主函数的声明,完成函数定义,注意复制构造函数不复制编号num的值,只复制a,b的值。
要求对象初始化时,若执行普通构造函数,则输出 num object initial value:[a,b],若执行复制构造函数,则输出num object copy value:[a,b],若执行析构函数,则输出num object distruct,其中num为对象编号,从0开始,产生的第一个对象num应设为0,第二对象设为1,依次类推。提示:可以利用全局变量n来实现num值的自动设置。
裁判测试程序样例:
#include<iostream> using namespace std; int n = 0; class CTest{ int a,b; int num; //对象编号 public: CTest(int , int); ~CTest(); CTest(const CTest&); //复制构造函数 }; void Testfunc(CTest a){ } /* 请在这里填写答案,完成函数定义 */ int main(){ int a,b; cin>>a>>b; CTest t0(a,b); CTest t1(t0); //复制构造函数调用 CTest t2 = t1; //复制构造函数调用 cout<<endl<<"run Testfunc"<<endl; Testfunc(t0); //复制构造函数完成传参 cout<<"Testfunc return"<<endl<<endl; }输入样例:
在这里给出一组输入。例如:
9 9输出样例:
在这里给出相应的输出。例如:
0 object initial value:[9,9] 1 object copy value:[9,9] 2 object copy value:[9,9] run Testfunc 3 object copy value:[9,9] 3 object distruct Testfunc return 2 object distruct 1 object distruct 0 object distruct参考示例:
CTest::CTest(int aa,int bb):a(aa),b(bb),num(n++){ cout<<num<<" object initial value:["<<a<<","<<b<<"]"<<endl; } CTest::CTest(const CTest& t):a(t.a),b(t.b),num(n++){ cout<<num<<" object copy value:["<<a<<","<<b<<"]"<<endl; } CTest::~CTest(){ cout<<num<<" object distruct"<<endl; }