zhaoao0061 2015-12-10 06:54 采纳率: 33.3%
浏览 1258

求c++大牛帮助,一小段笔试代码,怎么都想不通

class Point{
private:
double X,Y;
public:
Point(double xx=0, double yy=0)
{
X=xx;
Y=yy;
cout<<"Point("<<X<<","<<Y<<")"<<endl;
}
Point(Point &p)
{
X=p.X;
Y=p.Y;
cout<<"Point is copied."<<endl;
}
double Distance(Point &p);

};
double Point::Distance(Point &p)
{
double dx,dy;
dx = X - p.X;
dy = Y - p.Y;
return sqrt(dx*dx + dy*dy);
}
Point f(double x, double y)
{
Point P(x,y);
return P;
}
void main()
{
Point A(0,0);
Point &B = f(3,4); //这一行为什么会调用两次拷贝构造函数?
cout<<"Distance is "<<A.Distance(B)<<endl;

}


以下是输出结果:
Point(0,0)
Point(3,4)
Point is copied.
Point is copied.
Distance is 5

好像是调用了两次拷贝构造函数,我知道有一个返回的return P调用了一次,为何构造引用&B时还会调用?但这样的话下边的函数A.Distance(B)参数也会构造一次引用为啥不调用了呢?。。。。。好无语啊。。。。。考研试题,救救我这个考研狗吧。

  • 写回答

4条回答 默认 最新

  • zhaoao0061 2015-12-10 07:44
    关注

    我上边发的是vc6调试的
    用vs调试了一遍,就是调用一次了
    这样输出
    Point(0,0)
    Point(3,4)
    Point is copied.
    Distance is 5

    到底哪个才是正确答案啊?

    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办