通过虚函数表访问private成员
来源:互联网 发布:java mybatis 悲观锁 编辑:程序博客网 时间:2024/05/29 05:58
通过虚函数表可以访问到对象的布局,通过函数指针可以运行函数,不论是private还是public,于是单继承、非virtual的demo如下:
- #include <iostream>
-
- class A
- {
- public:
- A(): x(5) { }
-
- private:
- virtual void fun() { std::cout << "A::fun()" << std::endl; }
-
- private:
- int x;
- };
-
- class B: public A
- {
- public:
- B(): y(3) { }
-
- private:
- virtual void fun() { std::cout << "B::fun()" << std::endl; }
-
- private:
- int y;
- };
-
- typedef void (*Fun)();
-
- void PrintVTable(Fun* pVT)
- {
- Fun* pFun = pVT;
- while( *pFun )
- {
- (*pFun)();
- pFun ++;
- }
- }
-
- void PrintMembers(int* pMembers)
- {
- std::cout << *pMembers << std::endl;
- }
-
- void PrintVTableAndMembers(B* ptr)
- {
- int* pAddress = (int*) ptr;
- PrintVTable((Fun*) *pAddress);
- pAddress ++;
-
- PrintMembers(pAddress);
- pAddress ++;
-
- PrintMembers(pAddress);
- pAddress ++;
- }
-
- void main(void)
- {
- B b;
-
- PrintVTableAndMembers(&b);
-
- system("pause");
- }
如果是多继承 或者 继承方式用virtual,对象的布局是不一样的,可以参考下本文:http://yoyo.is-programmer.com/posts/10671.html
- 通过虚函数表访问private成员
- 绕过private成员函数访问限制
- 通过虚函数表 私有成员是可以访问的
- 通过vtable指针访问声明为private的虚函数
- 附加:通过函数访问私有成员
- C++:private成员的访问
- public protected private 成员函数和成员变量在public protected private 继承后访问权限问题
- public protected private 成员函数和成员变量在public protected private 继承后访问权限问题
- c++ public, protected, private成员变量,成员函数继承和访问规则实例代码
- C++拷贝构造函数可以访问传入对象的private成员变量
- 品private成员的访问控制
- 用指针访问类中private成员
- 怎样访问private:static中的数据成员
- C++用指针访问private 成员
- 如何访问类中的private成员变量
- C++成员访问限定符 private public
- 通过指针访问类的静态成员函数
- 派生类是否继承基类中的private成员,若继承为何不能在成员函数中访问?
- VS2005下各基本类型的size
- C++对象布局及多态实现的探索
- C++的继承与多态demo
- C++中的this指针
- 多重继承的虚函数表与类型转换
- 通过虚函数表访问private成员
- 加密解密小程序
- MD5加密小程序
- 定时启动线程
- ThreadPoolExecutor的使用
- java.lang.String.split()中的|
- GSL - GNU Scientific Library
- 读写properties
- 终极图解内存(上篇)