输出与C ++程序不同的原因是什么?

问题描述 投票:0回答:1

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

程序:

#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++
1个回答
2
投票

你的A SetX(int X)正在返回一个对象的副本,所以当你做a.SetX(10).SetY(20);时,.SetY正在该副本上运行 - 然后被摧毁。

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

© www.soinside.com 2019 - 2024. All rights reserved.