帮帮看一下这道题吧 类与对象设计 C++(2)

调试下列程序。
 

#include<iostream>
using namespace std;
class TPoint
{
   public:
      TPoint(int x,int y){X=x; Y=y;}
      TPoint(TPoint &p);
      ~TPoint( ){cout<<"Destructor is called\n";}
      int getx( ){return X;}
      int gety( ){return Y;}
   private:
      int X,Y;
};
TPoint::TPoint(TPoint &p)
{
     X=p.X;
     Y=p.Y;
     cout<<"Copy-initialization Constructor is called\n";
}
int main( )
{
     TPoint p1(4,9);
     TPoint p2(p1);
     TPoint p3=p2;
     cout<<"p3=("<<p3.getx( )<<","<<p3.gety( )<<")\n";
     return 0;
}

在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:

cout<<"Constructor is called.\n";

(1) 创建对象p1、p2、p3分别调用的是哪个构造函数?

(2) 在程序sy2_2.cpp中再增加2个新对象p4和p5,要求用构造函数创建p4,调用拷贝构造函数创建p5,且p5的数据初值是p4的2倍。将正确运行结果粘贴在下面。

(1)

p1调用的是TPoint(int x,int y)

p2调用的是TPoint(TPoint &p)

p3调用的是TPoint(TPoint &p)

(2)

代码修改为:

#include<iostream>
using namespace std;
class TPoint
{
public:
	TPoint(int x,int y){X=x; Y=y;cout<<"Constructor is called.\n";}
	TPoint(TPoint &p);
	~TPoint( ){cout<<"Destructor is called\n";}
	int getx( ){return X;}
	int gety( ){return Y;}
private:
	int X,Y;
};
TPoint::TPoint(TPoint &p)
{
	X=p.X;
	Y=p.Y;
	cout<<"Copy-initialization Constructor is called\n";
}
int main( )
{
	TPoint p1(4,9);
	TPoint p2(p1);
	TPoint p3=p2;
	cout<<"p3=("<<p3.getx( )<<","<<p3.gety( )<<")\n";

	TPoint p4(5,6);
	TPoint p6 = TPoint(p4.getx()*2,p4.gety()*2);
	TPoint p5 = p6; 
	return 0;
}

运行结果: