C++ 借助指针突破访问权限的限制,访问private、protected属性的成员变量(花拳绣腿)

#include <iostream> using namespace std; class A { public: A(int a, int b, int c); private: int m_a; int m_b; int m_c; }; A::A(int a, int b, int c) : m_a(a), m_b(b), m_c(c) { } int main() { A obj(10, 20, 30); int a1 = *(int*)&obj; int b = *(int*)((int)&obj + sizeof(int)); A* p = new A(40, 50, 60); int a2 = *(int*)p; int c = *(int*)((int)p + sizeof(int) * 2); cout << "a1=" << a1 << ", a2=" << a2 << ", b=" << b << ", c=" << c << endl; return 0; }

1.直接使用obj访问m_b是访问不到的。不过通过指针可以访问
int b = p->m_b; ==>等价==> int b = *(int*)( (int)p + sizeof(int) );
2.前面我们说 C++ 的成员访问权限仅仅是语法层面上的,是指访问权限仅对取成员运算符.和->起作用,而无法防止直接通过指针来访问。你可以认为这是指针的强大,也可以认为是 C++ 语言设计的瑕疵。使用指针不是为了访问到 private、protected 属性的成员变量,这种“花拳绣腿”没有什么现实的意义,本节主要是让大家明白编译器内部的工作原理,以及指针的灵活运用。


__EOF__

本文作者漫漫程序之路
本文链接https://www.cnblogs.com/still-smile/p/16077247.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Smah  阅读(580)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示