2011-09-29 46 views
0

可能重複:
Is it possible to access private members of a class?是否有可能更改私人CLASS數據記憶illigaly?

是否有可能改變一個類的私有數據承包商,客人如果沒有會員功能或朋友的功能,通過創建該類的對象和訪問創建的地址對象,如果我們知道該類的地址,是否可以使用這樣的指針修改私有數據成員?

+0

改變類的定義不麻煩。另外,不要這樣寫代碼。 –

+1

是的,這是可能的。你爲什麼要這樣做? – a1ex07

+1

[This]的Dupe(http://stackoverflow.com/questions/729363/is-it-possible-to-access-private-members-of-a-class),[this](http:// stackoverflow。 com/questions/3467261/can-i-trick-access-to-private-c-class-member-variables)and [this](http://stackoverflow.com/questions/726096/accessing-private-members/726304) #726304) – Alex

回答

4

假設您知道類字段的內存中佈局,確實可以使用類似*((FieldType*)((char*)&object + fieldOffset)) = someValue;的東西來更改其私有成員。

你不應該這樣做。這是犯罪。

1

語言不是爲了警察而是爲了防止犯錯誤。你可以做一系列不同的事情來訪問私人領域,但在一天結束時,他們都不是一個好主意,前提是如果班級是你的,你可以以合理的方式提供訪問,如果不是你的,所有私人成員的實現細節可以從一個版本更改爲另一個版本,並且最有可能不變的類可能不知道,如果你修改這些成員可能會破壞。

相關問題