鱼C论坛

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

构造函数

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

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

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

x
  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;

  4. class Point{
  5. public:
  6.     Point(int xx = 0, int yy = 0):x(xx), y(yy){cout<<"Constructing\n";}
  7.     Point(const Point &a):x(a.x), y(a.y){cout<<"Copying\n";}
  8.     int GetX(){return x;}
  9.     int GetY(){return y;}
  10. private:
  11.     int x, y;
  12. };
  13. class Distance{
  14. public:
  15.     Distance(Point aa, Point bb):a(aa), b(bb){}
  16.     double GetDis(){return sqrt(pow(a.GetX() - b.GetX(), 2) + pow(a.GetY() - b.GetY(), 2));}
  17. private:
  18.     Point a, b;
  19. };
  20. int main(){
  21.     Point mp1(5, 10), mp2(20, 30);
  22.     Distance mdist(mp1, mp2);
  23.     cout<<"The distance is "<<mdist.GetDis()<<endl;
  24. }
复制代码

运行结果
无标题.jpg

问题是:
为什么有四个Copying
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

首先该函数执行时将mp1和mp2各拷贝复制一份传递到函数里面
然后Distance(Point aa, Point bb):a(aa), b(bb){}又将传递进来的Point对象进行了拷贝复制
所以一共四个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

哦是将mp1, mp2复制给一个匿名对象,
匿名对象再复制给a, b吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

函数调用的时候,形参不是地址或引用就会拷贝一份
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 16:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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