2011-09-29 45 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

语言不是为了警察而是为了防止犯错误。你可以做一系列不同的事情来访问私人领域,但在一天结束时,他们都不是一个好主意,前提是如果班级是你的,你可以以合理的方式提供访问,如果不是你的,所有私人成员的实现细节可以从一个版本更改为另一个版本,并且最有可能不变的类可能不知道,如果你修改这些成员可能会破坏。

相关问题