c++ -- 浅谈突破类的私有成员访问限制

如果我们在定义一个类的对象时,不使用任何的内部函数,是不能访问私有成员的,那么今天记录两种方式,达到突破界限的访问方式。

  1. 指针偏移
    在这里插入图片描述
    分析:
    因为在定义类的时候,开辟的地址,即类的开始地址应该是变量的首地址,那么在 A obj(1, 2, 3);int a = *(char*)(&obj);&obj是取类的首地址,然后将地址转化成char*的类型,即字符指针类型,便于后续计算后续元素的地址,然后*(char*)(&obj)取指针的指向的值,在此程序中就是m_a;后续的两个私有成员变量,即在此基础上偏移即可。
    注意:
    指针加上整型,是按照指针类型大小乘以提供的数值做加法的。int型指针+ n,地址+ 0x 4 * n,char型指针+n,地址+ 0x 1 * n。
    所以要指针转换为char*,运算完后再转回int*

  2. 使用define进行暗自修改类型,然而类的底层内存布局没改变,故可行。
    在这里插入图片描述

发布了166 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/104189535