有以下两个程序 分析它们的执行结果有什么不同。 程序1: #include class
问题详情
有以下两个程序,分析它们的执行结果有什么不同。
程序1:
#include
class Point
{
int x,y;
public:
Point(){x=y=0;}
Point(int i,int j){x=i;y=j;}
Point operator+(Point);
void disp() (cout$amp;
}
Point Point::operator+(Point P)
{
this->x+=P.x; this->y+=p.y;
return *this;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout$amp;
cout$amp;
p3=pl+p2;
cout$amp;
cout$amp;
cout$amp;
cout$amp;
}
程序2:
#include
class Point{
int x,Y;
public:
Point(){x=y=O;}
Point(int i,int j){x=i,y=j;}
Point operator+(Point);
void disp f){cout$amp;
}
Point Point::operator+(Point P)
{
Point s;
s.x=x+p.x; s.y=y+p.y;
return s;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout$amp;
cout$amp;
p3=pl+p2;
cout$amp;
cout$amp;
cout$amp;
cout$amp;
}
参考答案
【解析】这两个程序中的main函数完全相同,类Point中的运算符重载均采用成员函数方式实现,只是程序1的运算符重载函数使用this指针,而程序2的运算符重载函数使用局部对象。
p3=p1+p2 等价于p3=p1.operator+(p2)。对于程序1,this指针指向p1对象,执行this->x+=p.x;this->y十一 p.y;语句,修改p l对象的x和y成员值,执行return*this;语句,将pl对象赋给p3。所以p1和p3两个对象的x、Y值相同,即p3=pl+p2等价于 p1=p1+p2,p3:p1,其运行结果如下:
p1:(2,3)
p2:(3,4)
执行p3=pl+p2后
P1:(5,7)
p2:(3,4)
P3:(5,7)
对于程序2,执行运算符重载函数,Point s;语句定义一个对象,s.x=x+p.x;s.y=y+p.y;语句用于修改s对象的x、Y值,ret%il~l s;语句返回该对象,赋给p3,而p1和p2对象不改变。其运行结果如下:
p1:(2,3)
p2:(3,4)
执行p3=pl+p2后
p1:(2,3)
p2:(3,4)
p3:(5,7)