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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输出与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);,以便返回对原始对象的引用而不是副本。

以上是关于输出与C ++程序不同的原因是什么?的主要内容,如果未能解决你的问题,请参考以下文章

c语言与汇编语言、c++语言等有啥不同呢?

C语言中float与double在程序中输出的分别是多少位?

编程语言吐槽之Java与C

用C语言只能编写consoleapplication?

LoadRunner脚本是啥语言?

什么是逻辑运算符