2014-01-29 55 views
-3

如果我使用下面的代碼那麼爲什麼輸出中是在相同下列兩種情況:在上面的代碼爲什麼「b.print()」輸出在屏幕上的相同數據類對象的C++引用返回 - 爲什麼不工作?

class Test 
{ 
    public: 
    int data; 

    Test() { data = 9; } 

    Test& myfunction(); 
    void print() { cout << data<<endl; } 
}; 

Test m; 
Test& Test::myfunction() 
{ 
    return m; 
};  


int main() 
{ 
    Test b; 
    Test a; 
    b=a.myfunction(); 
    b.print(); 
    m.data=7; 
    b.print(); 

    return 0; 
} 

我甲肝改變了即使經過'm'的'數據'...?
'b'是對'm'的引用。所以,如果我改變的「m」「數據」的值時,「B」「數據」的值也應自動改變...的上面的代碼

輸出是:
9 // 爲什麼不是7?

+0

這不是留言板,所以請避免重複發帖。使用註釋和編輯來改變原來的問題。 – dasblinkenlight

+0

就回答你的問題而言,'b = a.myfunction();'會複製由引用返回的'm',所以'b'是一個獨立於'a'的獨立對象。切換到'Test&b(a.myfunction());'得到你想要的效果。 – dasblinkenlight

+0

@dasblinkenlight在第一個問題中已經說過,OP看不懂 – Paranaix

回答

0

你會得到相同的結果,如果你會寫

Test a; 
Test &b = a.myfunction(); 

至於你的代碼

Test b; 
Test a; 
b=a.myfunction(); 

那麼B是分配m的副本單獨的對象。所以m的任何變化都不會影響b。 b沒有被定義爲參考。

相關問題