2010-07-25 85 views
4

我有接受一個對象作爲參數的方法。操縱數據成員(C++)

兩個呼叫者和參數具有相同的構件(它們是相同的類的實例)。

在該方法中,特定成員進行比較,然後,基於該比較,需要操縱參數對象中的一個成員:

class Object { 

    // members 

public: 

someMethod (object other) { 

    int result; 
    member1 - other.member1 = result; 
    other.member2 = other.member2 - result; 

} 

的唯一事情是,它實際上並不改變其它成員2超出這個範圍,並且變更需要是永久性的。

所以,是的,對不起,我需要對指針的意見......我已經在網上和書看,但我無法得到它的工作。我想你們中的一個人會在大約30秒內看到這個並且知道答案。我有RFTM,並且處於一個愚蠢的損失。我不鼓勵。

謝謝大家!

+3

小心:C++是類型敏感的。我假定當你爲這個問題重新輸入時,引入了'類Object'和'object other'之間的區別,但是你可能想要確保這個case在你的實際代碼中是一致的。 – 2010-07-25 20:04:09

+2

另外,您不能在作業的左側使用減法。應該是'result = member1 - other.member1;'? – 2010-07-25 20:05:13

+0

是的,你的建議在實際代碼中已經被考慮到了!謝謝。 – 2010-07-25 20:12:41

回答

8

這是因爲你在傳遞價值(相當於傳遞一份拷貝,認爲它是讓某人拷貝一份文件,然後要求他們進行修改,但你仍然擁有原始文件,所以他們所做的修改將會獲得當你收回它時,它不會反映在你的副本中,但是,如果你告訴他們你的副本位於何處,他們可以去修改它,以便下次訪問時看到它)。您需要可以參考與

Object& object 

或指針傳遞給目標對象

Object * object 

退房this page爲的區別的討論。

+0

非常感謝!對此,我真的非常感激。這正是我期待的! – 2010-07-25 20:11:30

4

您正在向someMethod函數傳遞副本other。嘗試傳遞參考代替:

someMethod(object &other) { ... 

當你傳遞一個副本時,更改爲other.member2只修改副本而不是原始對象。傳遞一個參考,但是,讓other參數在將呼叫傳遞給someMethod(obj)原始對象。

+2

作爲一個方面說明:將複雜對象作爲副本傳遞是很昂貴的。因此,即使對象在方法內部沒有改變,通常也可以將它作爲const引用傳遞。這樣可以避免複製,並保證調用者不會更改對象。 – ollb 2010-07-25 20:06:50