关于C++中的构造函数的执行顺序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 05:28:09
#include <iostream.h>
class test;
void fun1(test t);
test fun2();
class test{
public:
test(int n=1){
val=n;
cout<<"con."<<endl;
}
test(const test &t){
val=t.val;
cout<<"copy con."<<endl;
}
test &operator=(test &t){
val=t.val;
cout<<"assignment"<<endl;
return *this;
}
private:
int val;
};
void main(){
test t1(1);
test t2=t1;
test t3;
t3=t1;
fun1(t2);
t3=fun2();
}
void fun1(test t){}
test fun2(){
test t;
return t;
}
这个程序的运行结果是什么?能解释一下为什么吗?

con. //创建对象t1,调用函数 test(int n=1)
copy con. //test t2=t1; 是用一个对象初始化一个对象,调用复制构造函数
//和test t2(t1);效果相同
con. //创建对象t3,调用函数test(int n=1)
assignment//t3=t1;用t1给t3赋值,调用赋值运算符重载函数 test &operator=(test &t)
copy con.//fun1(t2);用一个对象当参数,调用复制构造函数
con //fun2中创建对象t,调用函数 test(int n=1)
copy con. //return t;返回值是一个对象,用复制构造函数把t拷贝到一个无名对象中
assignment//把无名对象的值赋给t3,调用赋值运算符重载函数 test &operator=(test &t)