是否可以通过创建该类的对象并访问该创建对象的地址来更改CLASS的私有数据成员,通过创建该类的对象并访问该创建对象的地址,如果我们有可能使用这样的POINTERS修改PRIVATE数据成员知道那个班的地址???
答案 0 :(得分:4)
假设您知道类字段的内存布局,确实可以使用*((FieldType*)((char*)&object + fieldOffset)) = someValue;
之类的内容更改其私有成员。
你不应该这样做。这是犯罪行为。
答案 1 :(得分:1)
这种语言不是为了警告你,而是为了防止你犯错误。您可以执行一系列不同的操作来访问私有字段,但最终,如果该类是您的,您可以以合理的方式提供访问,这些都不是一个好主意。如果它不是你的,那么所有私有成员都是可以从一个版本更改为另一个版本的实现细节,并且很可能是您可能知道或不知道的类的不变量,如果您修改这些成员,可能会中断。