我遇到了一个程序,它提供的输出与我预期的不同。可能是什么原因?
程序:
#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。发生了什么是背景?任何帮助表示赞赏?
你的A SetX(int X)
正在返回一个对象的副本,所以当你做a.SetX(10).SetY(20);
时,.SetY
正在该副本上运行 - 然后被摧毁。
您希望将函数签名更改为A& SetX(int X);
,以便返回对原始对象的引用而不是副本。