2015-06-02 22 views
0

在下面的代碼中,我的目標是測試outerFunction(myTest).setPrivateVar(5);行。我不知道爲什麼,但調用此函數不會將myTestprivateVar成員更改爲5,但調用cout << outerFunction(myTest).readPrivateVar正確顯示值200.任何人都可以解釋爲什麼這是?C++:在返回的類上調用函數

#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; 
} 

輸出:

200 
200 
+2

'測試outerFunction(測試passedTest){'需要Test'的'副本,並返回一個副本。您應該傳遞並通過引用返回'Test&outerFunction(Test&passedTest){' –

回答

5

您在這裏複印,無論當你通過一些進入功能,當您返回它:

Test outerFunction(Test passedTest) { 
    return passedTest; 
} 

的修改outerFunction(myTest)影響複印,不是原來的。

爲了讓你似乎是後語義,你需要使用引用:

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

謝謝。我不知道爲什麼我沒有想到這一點。我在傳遞時使用引用,並在返回時引用,但從未同時使用這兩個引用。 –