(我沒有找到我一直在尋找的答案,但我弄明白我自己,所以我想嘗試回答我的問題別人誰可能在將來)傳遞對象
如何將對象傳遞給非類函數並更改其數據? 例如
類Foo {}具有私人INT X = 5,我想它與出從類直接入射ChangeValue函數改變爲10,但使用非類函數調用此函數。
(我沒有找到我一直在尋找的答案,但我弄明白我自己,所以我想嘗試回答我的問題別人誰可能在將來)傳遞對象
如何將對象傳遞給非類函數並更改其數據? 例如
類Foo {}具有私人INT X = 5,我想它與出從類直接入射ChangeValue函數改變爲10,但使用非類函數調用此函數。
所以,如果你的代碼看起來是這樣的:
class Foo {
public:
void changeValue(int val) { x = val; }
private:
int x;
}
而且要改變X給ChangeValue方法外,所有你需要做的就是添加功能要在更改爲朋友Foo課。因此,例如,對於這個工作:
void g(Foo& foo) {
foo.x = 10;
}
您必須將此行添加到您的Foo類:
friend void g(Foo& foo);
聲明類爲好友裏面的東西讓該函數/類訪問私有成員和方法。
比方說,我們有
class Foo{
private:
int x;
public:
change(int y){
x = y;
}
}
,我們想要的功能
void changeVal(Foo test, int num);
改變,而不是
Foo::change(int y);
的X,我們將給予我們的changeVal函數的地址對象
int main(){
Foo test;
changeVal(&test, 5);
}
那麼我們要創建changeVal,使指針對象來保存我們的原始對象
void changeVal(Foo* test, int num){
...
}
的地址,並在身體,我們需要創建第三個目的在於把原來對象的值所以我們給它,我們存儲在「富*測試」的地址與原地址更改新對象的值,所以我們正在改變,而不是一個副本
void changeVal(Foo* test, int num){
Foo test2 = &test;
test2.change(num);
}
這似乎更多的是對問題的澄清,而不是一個完整的答案。但是,你問的問題還不是很清楚。也許, 刪除這個問題,收集一切到一個新的(與工作代碼),並突出你不確定的部分。 – Potatoswatter
我張貼的答案,原來,這對我有用,我不知道它是否正確,你能檢查它嗎? – Christina
看完你的解決方案後,我看不出如何工作。如果我是對的,在創建test2時在changeVal函數內部,它是通過複製創建的,所以test2.change(num)不會改變測試內的任何東西。 –
當你聲明某事是私人的時候,它不應該在你認爲可以訪問的方式之外訪問(f.e.將外部函數聲明爲朋友)。 –