源程序:
#include <iostream>
using namespace std;
class Point
{
private:
int X,Y;
public:
Point(int a=0,int b=0) //构造函数,默认参数
{
X=a;
Y=b;
cout<<"Initializing"<<endl;
}
Point(const Point &p); //复制构造函数
int GetX()
{
return X;
}
int GetY()
{
return Y;
}
void Show()
{
cout<<"X="<<X<<",Y="<<Y<<endl;
}
~Point()
{
cout<<"delete..."<<X<<","<<Y<<endl;
}
};
Point::Point(const Point &p) //定义复制构造函数
{
X=p.X;
Y=p.Y;
cout<<"Copy Initializing"<<endl;
}
void display(Point p) //对象作为参数
{
p.Show();
}
void disp(Point &p) //对象的引用作为函数的参数
{
p.Show();
}
Point fun()
{
Point A(101,202);
return A; //函数的返回值是对象
}
void main()
{
Point A(42,35);
Point B(A); //对象A初始化对象B,第一次调用复制构造函数
Point C(58,94);
cout<<"called display(B)"<<endl;
display(B); //对象B是函数的参数,第二次调用复制构造函数
cout<<"Next..."<<endl;
cout<<"called disp(B)"<<endl;
disp(B);
cout<<"call C=fun()"<<endl;
C=fun(); //对象C是函数的返回值,第三次调用复制构造函数
cout<<"called disp(C)"<<endl;
disp(C);
cout<<"out..."<<endl;
}
运行结果: