#include<iostream.h>
class Myclass
{
private:
int val;
public:
Myclass(int i=0)
{val=i;cout<<"val="<<val<<endl;}
Myclass(Myclass &cp);
void set(int i);
int show();
~Myclass();
};
Myclass::Myclass(Myclass &cp)
{
val=cp.val;
cout<<"Copy val="<<val<<endl;
cout<<"&&&&&&&&&&&&&&&&&&&&"<<endl;
}
void Myclass ::set(int i)
{
val=i;
}
int Myclass ::show()
{
return val;
}
Myclass::~Myclass()
{
cout<<"Exit for val="<<val<<endl;
}
Myclass MyFun(Myclass);
void gFun();
void main()//主函数main
{
gFun();
cout<<"exit main"<<endl;
}
void gFun()
{
Myclass my(5),ret;
ret=MyFun(my);
}
Myclass MyFun(Myclass obj)
{
cout<<"In MyFun()"<<endl;
cout<<"obj.val="<<obj.show()<<endl;
obj.set(10);
cout<<"obj.val="<<obj.show()<<endl;
cout<<"return obj..."<<endl;
cout<<"*************"<<endl;
return obj;
}
运行结果:
val=5
val=0
Copy val=5
&&&&&&&&&&&&&&&&&&&&
In MyFun()
obj.val=5
obj.val=10
return obj...
*************
Copy val=10
&&&&&&&&&&&&&&&&&&&&
Exit for val=10
Exit for val=10
Exit for val=10
Exit for val=5
exit main
我的问题是为什么运行到ret=MyFun(my);的时候Myclass::Myclass(Myclass &cp)会执行呢?
而且执行完了MyFun又执行一下,这是为什么呢?
前面说错了 是调用拷贝构造函数 你的程序写的有点乱
其实就是
按值传参数要调用一次 把参数拷贝一份 传 到函数中
函数返回时 调用一次 把返回值传到 函数外 ,你可以把你的函数返回类型改为void int什么的
就不会有
执行完了MyFun又执行一下,这是为什么呢?
如lorylxw()所说,在ret=MyFun(my)中,传递参数的时候调用一次拷贝构造函数,返回的时候又调用一次拷贝构造函数。但是为什么会调用四次析构函数呢?
两次调用拷贝构造函数都是用实参初始形参,第一次是用my初始obj,第二次是返回obj时用其实参来初始。不知讲清楚了没有。