2011-09-29 5 views
0

가능한 중복 :
Is it possible to access private members of a class?CLASS 비공개 프라이버시 데이터 멤버를 변경할 수 있습니까?

그 생성의 주소를 그 클래스의 객체를 생성하고 액세스하여, 멤버 함수 또는 친구 기능이없는 클래스의 프라이빗 데이터 멤버들을 변경하는 것이 가능 개체, 그것은 우리가 그 클래스의 주소를 안다면 그러한 POINTERS를 사용하여 PRIVATE 데이터 멤버를 수정하는 것이 가능합니까?

+0

클래스 정의를 변경하는 것은 번거롭지 않습니다. 또한 이와 같은 코드를 작성하지 마십시오. –

+1

예, 가능합니다. 왜 그랬을까요? – a1ex07

+1

[this] (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) 및 [this] (http://stackoverflow.com/questions/726096/accessing-private-members/726304 # 726304) – Alex

답변

4

클래스 필드의 메모리 내 레이아웃을 알고 있다고 가정하면 *((FieldType*)((char*)&object + fieldOffset)) = someValue;과 같은 것을 사용하여 개인 멤버를 변경할 수 있습니다.

이렇게해서는 안됩니다. 형사입니다.

1

언어는 당신을 속인 것이 아니라 오히려 실수를하지 않기 위해서입니다. 비공개 필드에 액세스하려면 여러 가지 작업을 수행 할 수 있지만 하루가 끝날 때 클래스가 자신의 것이면 합리적인 방법으로 액세스를 제공 할 수 있다는 전제에 대한 좋은 아이디어는 없습니다. 자신이 아닌 경우 모든 비공개 멤버는 한 버전에서 다른 버전으로 변경 될 수있는 구현 세부 사항이며 클래스를 변경하거나 변경할 수있는 클래스의 invariant가있을 수 있습니다.

관련 문제