通过外部指针可以访问类的私有成员
2018-02-09 11:01
363 查看
class PrivateMemberFuncPtr { public: void bind(); private: void print() { printf("success\n"); } }; void (PrivateMemberFuncPtr::*ptr)(); void PrivateMemberFuncPtr::bind() { ptr=&PrivateMemberFuncPtr::print; } int main() { PrivateMemberFuncPtr obj; obj.bind(); ((&obj)->*ptr)(); }
private区段的访问控制是编译期的事件,通过模板类的虚函数实现中用成员函数指针调用是运行期方法。
实际上,无论私有还是公有的成员函数,编译后就是一个普通函数(扩展为需要this指针作为第一个参数),因此函数地址也就确定了,在运行期可以通过call或jmp指令跳转到该函数执行(只要有合法的this指针所指的对象)
相关文章推荐
- 通过指针访问C++对象的私有成员
- 内部类之设计模式-内部类可以访问外部类的私有成员
- JavaSE8基础 内部类可以访问外部类的私有成员
- 类外通过void指针间接访问类内私有成员变量
- 通过指针在类外访问私有成员的策略
- 外部类可以访问内部类的私有成员
- 同一个类不同对象,可以互相访问对方的私有成员而不通过get()或set()
- 内部类之设计模式-内部类可以访问外部类的私有成员
- C/C++—— 除了用类成员函数访问类私有成员变量外,还可以通过类对象地址来直接访问和修改类的私有成员变量
- 通过反射访问对象私有和保护成员
- 理解类级别的访问控制权限——类的成员函数可以访问该类所有对象的私有成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 通过java反射技术访问类中私有成员属性
- 深入理解Java中为什么内部类可以访问外部类的成员
- 深入理解Java中为什么内部类可以访问外部类的成员
- 在我的上一篇博客 深入理解Java中为什么内部类可以访问外部类的成员
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- 【C++】【一日一练】通过友元访问或改变类的私有成员【20140508】
- 深入理解Java中为什么内部类可以访问外部类的成员
- 指针对虚基类成员变量的访问为什么不能直接通过offset访问,而需要通过vbtable间接访问?