调试下列程序。
#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;
}
运行结果: