C ++:在返回的类上调用函数

时间:2015-06-02 15:19:04

标签: c++

在以下代码中,我的目标是测试1 3 5 7 9 行。我不确定原因,但调用此函数并不会将outerFunction(myTest).setPrivateVar(5); privateVar成员更改为5,但调用myTest会正确显示值200.任何人都可以解释为什么会这样?

cout << outerFunction(myTest).readPrivateVar

输出:

#include <iostream>
using namespace std;

class Test {
    private:
    int privateVar;

public:
    void setPrivateVar(int);
    int readPrivateVar();

};

void Test::setPrivateVar(int privateVarSet) {
    privateVar = privateVarSet;
}

int Test::readPrivateVar() {
    return privateVar;
}


Test outerFunction(Test passedTest) {
    return passedTest;
}

int main(int argc, char* args[]) {

    Test myTest;
    myTest.setPrivateVar(200);

    cout << myTest.readPrivateVar() << endl;

    outerFunction(myTest).setPrivateVar(5);
    cout << outerFunction(myTest).readPrivateVar() << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:5)

你在这里制作副本,无论是在你将某些东西传递给该函数还是当它返回时:

Test outerFunction(Test passedTest) {
    return passedTest;
}

outerFunction(myTest)的修改会影响副本,而不是原始版本。

要获得您似乎想要的语义,您需要使用引用:

Test& outerFunction(Test& passedTest) {
    return passedTest;
}