#include<iostream.h>
class myclass
{
public:
myclass(int n);
~myclass();
void set_i(int n) { i=n; }
int get_i() { return i; }
private:
int i;
};
myclass::myclass(int n)
{
i=n;
cout<<"Constructing "<<i<<endl;
}
myclass::~myclass()
{
cout<<"Destroying "<<i<<endl;
}
void fun(myclass obj)//1值传递
//void fun(myclass &obj)//2引用传递
{
obj.set_i(2);
cout<<"This is local i:"<<obj.get_i();
cout<<endl;
}
main()
{
myclass obj(1);
fun(obj);
cout<<"This is in main:";
cout<<obj.get_i()<<endl;
return 0;
}
结果1(值传递):
Constructing 1
This is local i:2
Destroying 2
This is in main:1
Destroying 1
当由于对象要传给函数而产生对象的拷贝时,不调用对象的构造函数,
但当函数内部的对象的拷贝撤消时,要调用对象的析构函数。
结果2(引用传递):
Constructing 1
This is local i:2
This is in main:2
Destroying 2 //1已经改变成了2
引用传递没有调用构造函数和析构函数