博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何访问其它类的私有成员变量,以及如何在CONST函数中修改成员变量
阅读量:6409 次
发布时间:2019-06-23

本文共 1392 字,大约阅读时间需要 4 分钟。

通过上一篇文章,我在分析继承过程中对象的数据结构时,意外发现可以通过地址随意的访问对象的数据,无论是私有的还是公开的。

于是做了以下实验,通过实验可以看出来,内存中的数据,只要不是在常量区,只要你能获得目标的地址,你就可以修改它,无论是在const函数中,还是某类的私有成员变量。

代码:

1 #include 
2 3 /*** 4 * @author:zanzan101 5 */ 6 7 // 测试如何在const函数中修改成员变量 8 class A 9 {10 private:11 int data1;12 int data2;13 public:14 A(): data1(1), data2(2){}15 void const_function(int d1, int d2) const16 {17 int* p;18 p = (int*)(unsigned int)&data1;19 *p = d1;20 p = (int*)(unsigned int)&data2;21 *p = d2;22 }23 void display()24 {25 printf("data1=%d, data2=%d\n", data1, data2);26 }27 };28 29 // 测试访问其他类的私有成员变量30 class B31 {32 private:33 A a;34 public:35 void set_a_data(int d1, int d2)36 {37 *(int*)&a = d1;38 *(((int*)(&a))+1) = d2;39 }40 void display()41 {42 a.display();43 }44 };45 46 47 int _tmain(int argc, _TCHAR* argv[])48 {49 printf(">> 通过const标识的函数修改成员变量:\n");50 A a;51 a.display();52 a.const_function(3, 4);53 a.display();54 55 printf(">> 修改其它类的私有成员变量:\n");56 B b;57 b.display();58 b.set_a_data(5, 6);59 b.display();60 61 system("pause");62 return 0;63 }

输出结果:

>> 通过const标识的函数修改成员变量:data1=1, data2=2data1=3, data2=4>> 修改其它类的私有成员变量:data1=1, data2=2data1=5, data2=6请按任意键继续. . .

 

转载于:https://www.cnblogs.com/zanzan101/p/3405380.html

你可能感兴趣的文章
mongodb索引
查看>>
特征探索经验
查看>>
UEditor自动调节宽度
查看>>
Unity中使用多构造函数
查看>>
语言类型的相关总结
查看>>
JAVA做验证码图片(转自CSDN)
查看>>
Delphi TServerSocket,TClientSocket实现传送文件代码
查看>>
JS无聊之作
查看>>
30天敏捷结果(2):用三个故事驱动你的一周
查看>>
浅谈输入法编程(转)
查看>>
CSS3 试试看
查看>>
Mac上搭建ELK
查看>>
443 Chapter7.Planning for High Availability in the Enterprise
查看>>
HttpHandler初探 - 页面上输出图像
查看>>
框架和语言的作用
查看>>
unidac连接ORACLE免装客户端驱动
查看>>
Cygwin + OpenSSH FOR Windows的安装配置
查看>>
咏南中间件支持手机客户端
查看>>
fastscript增加三方控件之二
查看>>
Windows Vista RTM 你准备好了么?
查看>>