标题:C++新手求助,为什么这个复制构造函数只调用了两次?
取消只看楼主
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
结帖率:100%
已结贴  问题点数:20 回复次数:5 
C++新手求助,为什么这个复制构造函数只调用了两次?
你好,谢谢你点进来。

在这个函数中我似乎调用了两次getx()和两次gety()
getx(),gety()函数如下

返回值为类对象时,复制构造函数就会被调用,但运行结果中好像只出现了两次复制构造函数

请问这是为什么
搜索更多相关主题的帖子: 构造函数 复制 调用 函数 C++ 
2020-03-21 22:45
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
得分:0 
对不起,上面结果图中圈错了。
下面是正确的图
2020-03-21 22:55
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
得分:0 
对不起,上面结果图中圈错了。
下面是正确的图
2020-03-21 22:55
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
得分:0 
回复 4楼 rjsp
但是值传给Line构造函数时调用拷贝构造函数输出的是第一行和第二行呀,那么第三第四行难道不是因为调用了getx()和gety()才输出的吗
2020-03-22 13:38
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
得分:0 
回复 7楼 rjsp
抱歉,这个是代码。

#include <iostream>
#include <cmath>
using namespace std;
class Point {    //Point类定义
public:
    Point(int xx = 0, int yy = 0) {
        x = xx;
        y = yy;
    }
    Point(Point& p);
    int getX() { return x; }
    int getY() { return y; }
private:
    int x, y;
};
Point::Point(Point& p)      
{    //复制构造函数的实现
    x = p.x;
    y = p.y;
    cout << "调用复制构造函数Point" << endl;
}

//类的组合
class Line {    //Line类的定义
public:    //外部接口
    Line(Point xp1, Point xp2);
    Line(Line& l);
    double getLen() { return len; }
private:    //私有数据成员
    Point p1, p2;    //Point类的对象p1,p2
    double len;
};


//组合类的构造函数
Line::Line(Point xp1, Point xp2) : p1(xp1), p2(xp2)
{
    cout << "调用构造函数Line" << endl;
    double x = static_cast<double>(p1.getX() - p2.getX());

    double y = static_cast<double>(p1.getY() - p2.getY());
    len = sqrt(x * x + y * y);
}


Line::Line(Line& l) : p1(l.p1), p2(l.p2)
{//组合类的复制构造函数
    cout << "调用复制构造函数Line" << endl;
    len = l.len;
}

//主函数
int main() {
    Point myp1(1, 1), myp2(4, 5);    //建立Point类的对象
    Line line(myp1, myp2);    //建立Line类的对象
    Line line2(line);    //利用复制构造函数建立一个新对象
    cout << "The length of the line is: ";
    cout << line.getLen() << endl;
    cout << "The length of the line2 is: ";
    cout << line2.getLen() << endl;
    return 0;
}

我想的是
//组合类的构造函数
Line::Line(Point xp1, Point xp2) : p1(xp1), p2(xp2)
{
    cout << "调用构造函数Line" << endl;
    double x = static_cast<double>(p1.getX() - p2.getX());

    double y = static_cast<double>(p1.getY() - p2.getY());
    len = sqrt(x * x + y * y);
}
这个函数里面出现了getX()两次,getY()两次,于是应该输出四次,但是结果只有两次。
2020-03-22 14:29
编程小白DIO
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-3-14
得分:0 
回复 9楼 rjsp
原来是这样!
因为之前在网上查到复制构造函数被调用的三种情况,结果自己理解错了
谢谢你的解答!!
2020-03-22 15:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500493-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.084210 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved