A-A+

有以下两个程序 分析它们的执行结果有什么不同。  程序1:  #include  class

2022-08-05 21:09:34 问答库 阅读 172 次

问题详情

  有以下两个程序,分析它们的执行结果有什么不同。

  程序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)

考点:程序,两个