鱼C论坛

 找回密码
 立即注册
查看: 2298|回复: 3

构造函数

[复制链接]
发表于 2018-6-28 15:30:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
#include<cmath>
using namespace std;

class Point{
public:
    Point(int xx = 0, int yy = 0):x(xx), y(yy){cout<<"Constructing\n";}
    Point(const Point &a):x(a.x), y(a.y){cout<<"Copying\n";}
    int GetX(){return x;}
    int GetY(){return y;}
private:
    int x, y;
};
class Distance{
public:
    Distance(Point aa, Point bb):a(aa), b(bb){}
    double GetDis(){return sqrt(pow(a.GetX() - b.GetX(), 2) + pow(a.GetY() - b.GetY(), 2));}
private:
    Point a, b;
};
int main(){
    Point mp1(5, 10), mp2(20, 30);
    Distance mdist(mp1, mp2);
    cout<<"The distance is "<<mdist.GetDis()<<endl;
}
运行结果
无标题.jpg

问题是:
为什么有四个Copying
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-28 16:10:00 | 显示全部楼层
初始化Distance对象的时候完成了四次拷贝复制

首先该函数执行时将mp1和mp2各拷贝复制一份传递到函数里面
然后Distance(Point aa, Point bb):a(aa), b(bb){}又将传递进来的Point对象进行了拷贝复制
所以一共四个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-28 16:48:04 | 显示全部楼层
BngThea 发表于 2018-6-28 16:10
初始化Distance对象的时候完成了四次拷贝复制

首先该函数执行时将mp1和mp2各拷贝复制一份传递到函数里面 ...

哦是将mp1, mp2复制给一个匿名对象,
匿名对象再复制给a, b吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-28 17:00:42 | 显示全部楼层
苏丛 发表于 2018-6-28 16:48
哦是将mp1, mp2复制给一个匿名对象,
匿名对象再复制给a, b吗

函数调用的时候,形参不是地址或引用就会拷贝一份
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-4 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表