0

#include <stdio.h>
#include <stdlib.h>
class A
{
int a;
public:
A()
{
a=100;
}

int get()
{
return a;
}
};

int main()
{
A *a=new A();
int *p=(int *)a;

printf("%d\n",a->get());

*p=200;

printf("%d\n",a->get());

system("pause");
}

its out put is -
100
200

so can any body help me to avoid this situation bcoz as we can observ the class definition we can access the private members.

2
Contributors
1
Reply
2
Views
12 Years
Discussion Span
Last Post by Chainsaw
0

What are you trying to avoid? Hacking? You hacked this and claim that you can access the private member a->a; All the 'private' designation means is that you can't access it via referencing it normally in the compiler; there's no implied protection of the memory area.

Try "a->a = 200;" and the compiler will tell you that you can't access a private member. That is a COMPILE time protection; what you demonstrated is a RUNTIME access.

Incidentally, add this to your definition of the class A:

virtual ~A() { a = 0; }

and try your hack. The output will read 100 and 100 and then your program will crash, because the vtable pointer for the destructor was set to 200.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.