苏丛 发表于 2018-6-28 15:30:09

构造函数

#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;
}

运行结果


问题是:
为什么有四个Copying

BngThea 发表于 2018-6-28 16:10:00

初始化Distance对象的时候完成了四次拷贝复制

首先该函数执行时将mp1和mp2各拷贝复制一份传递到函数里面
然后Distance(Point aa, Point bb):a(aa), b(bb){}又将传递进来的Point对象进行了拷贝复制
所以一共四个

苏丛 发表于 2018-6-28 16:48:04

BngThea 发表于 2018-6-28 16:10
初始化Distance对象的时候完成了四次拷贝复制

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

哦是将mp1, mp2复制给一个匿名对象,
匿名对象再复制给a, b吗

BngThea 发表于 2018-6-28 17:00:42

苏丛 发表于 2018-6-28 16:48
哦是将mp1, mp2复制给一个匿名对象,
匿名对象再复制给a, b吗

函数调用的时候,形参不是地址或引用就会拷贝一份
页: [1]
查看完整版本: 构造函数