首页 > 解决方案 > C++ 程序的输出与预期不同的原因是什么?

问题描述

我遇到了一个程序,它给出的输出与我预期的不同。可能是什么原因?

程序:

#include <iostream>
using namespace std;

//Class A
class A
{
    int x,y;
    public:
    //constructor
    A(int X,int Y):x(X),y(Y)
    {
    }
    A SetX(int X)
    {
        x = X;
        return *this;
    }
    A SetY(int Y)
    {
        y=Y;
        return *this;
    }
    void print()
    {
        cout << x << " " << y;
    }
};
int main()
{
    A a(5, 5);
    a.SetX(10).SetY(20);//???
    a.print();

}

从这里可以看出,a 是用值 5,5 创建的。然后分别使用值 10 和 20 调用 SetX() 和 SetY()。在这里,我希望 print() 将输出显示为 10、20。但令人惊讶的是,输出是 10,5。发生了什么是背景?任何帮助表示赞赏?

标签: c++

解决方案


A SetX(int X)正在返回对象的副本,因此当您这样做时a.SetX(10).SetY(20);.SetY正在对该副本进行操作 - 然后该副本被销毁。

您希望将函数签名更改为,A& SetX(int X);以便返回对原始对象的引用而不是副本。


推荐阅读