c++ - 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。发生了什么是背景?任何帮助表示赞赏?
解决方案
您A SetX(int X)
正在返回对象的副本,因此当您这样做时a.SetX(10).SetY(20);
,.SetY
正在对该副本进行操作 - 然后该副本被销毁。
您希望将函数签名更改为,A& SetX(int X);
以便返回对原始对象的引用而不是副本。
推荐阅读
- reactjs - TypeScript - 元素隐式具有“任何”类型,因为“故事文件”类型的表达式不能用于索引类型“{}”
- javascript - 打字稿模拟在 Jest 中命名为导出单例类
- python - 无法使用 argparse 从 sqlite3 读取数据
- django - Celery-beat 不适用于每日时间表
- ruby - React Native 命令“npx react-native start”不起作用
- javascript - 滚动动画的问题,有人有建议吗?
- json - Nuxt 如何在数组上循环并使用 v-for 正确显示数据
- powerbi - Power BI 列映射不显示值
- ruby-on-rails - 在 Capistrano 运行期间 Rails db:migrate 命令失败
- python - 尝试在 Django 中的模型表之间建立一个领域。但是在插入值时出现错误 |外键项必须是一个实例