2013-07-06 32 views
0

我在組成一個問題,我不能得到預期的輸出,請幫我成分,不能得到預期的結果

#include <iostream> 
using namespace std; 

class something{ 
int length; 
public : 
something(){length = 0;} 
something(int l){length = l;} 
void setLength(int l){length = l;} 
int getLength(){return length;} 
}; 

class person{ 
int age; 
something obj_s; 
public: 
person(int i){age = i;} 
void setS(int length) 
{ 
    something temp(length); 
    obj_s = temp; 
} 
something getS(){return obj_s; } 
}; 

int main() 
{ 
person p(20); 
cout<<p.getS().getLength()<<endl; 
p.getS().setLength(20); //--------change at here--------- 
cout<<p.getS().getLength()<<endl; 

//-------------------------------------------------------- 

person w(20); 
w.setS(5); 
cout<<w.getS().getLength()<<endl; 
w.getS().setLength(20); //--------change at here--------- 
cout<<w.getS().getLength()<<endl; 
return 0; 
} 

輸出爲:

0 
0 
5 
5 

爲什麼不:(預期產出)

0 
20 
5 
20 

如果我想要預期的輸出,我應該怎麼做?

+0

當您在調試器中運行時發現了什麼? –

+0

另外,我只看到'cout'的兩種用法;你從哪裏得到4行輸出? –

+0

提示:'getS()'返回一個'人'的'東西'的*副本 –

回答

4

此功能

something getS(){return obj_s; } 

應該返回參考

something& getS(){return obj_s; } 

因爲你打算改變就地值。

+0

非常感謝你......它的工作! –

+1

很高興工作。您可以通過點擊綠色複選標記來接受*這個答案。這將表明這是正確的解決方案。 – chrisaycock

相關問題