C++ 通过虚函数表,直接外部访问类中的函数,并且脱离类
来源:互联网 发布:如何创建java项目 编辑:程序博客网 时间:2024/06/06 07:52
#include <iostream>
class CStu
{
virtual void go1()
{
std::cout << "go1" << std::endl;
}
virtual void go2()
{
std::cout << "go2" << std::endl;
}
virtual void go3()
{
std::cout << "go3" << std::endl;
}
};
int main()
{
CStu *p = new CStu;
// p指针里面存放的数据是虚函数表的二级指针
//*(int *)p p占4个字节,强转成int * 后 解引用,取出二级指针地址
//(int **)(*(int *)p)将二级指针地址由void **转为 int **
//(int **)(*(int *)p) + n 相当于(int **)(*(int *)p)[n],取出里面的元素指针
// *((int **)(*(int *)p) + n) 解该引用,取出指针里面存放的地址
//(void *)(*((int **)(*(int *)p) + n))将取出的地址值强转为void* 型,
//外面赋值给函数指针,即可调用类里面的虚函数。
std::cout << *(int *)p << std::endl;
std::cout << *((int **)(*(int *)p) + 0) << std::endl;
std::cout << *((int **)(*(int *)p) + 1) << std::endl;
std::cout << *((int **)(*(int *)p) + 2) << std::endl;
typedef void (*fun)();
for (int i = 0; i < 3; i++)
{
fun f1 = (fun)((void *)(*((int **)(*(int *)p) + i)));
f1();
}
return 0;
}
class CStu
{
virtual void go1()
{
std::cout << "go1" << std::endl;
}
virtual void go2()
{
std::cout << "go2" << std::endl;
}
virtual void go3()
{
std::cout << "go3" << std::endl;
}
};
int main()
{
CStu *p = new CStu;
// p指针里面存放的数据是虚函数表的二级指针
//*(int *)p p占4个字节,强转成int * 后 解引用,取出二级指针地址
//(int **)(*(int *)p)将二级指针地址由void **转为 int **
//(int **)(*(int *)p) + n 相当于(int **)(*(int *)p)[n],取出里面的元素指针
// *((int **)(*(int *)p) + n) 解该引用,取出指针里面存放的地址
//(void *)(*((int **)(*(int *)p) + n))将取出的地址值强转为void* 型,
//外面赋值给函数指针,即可调用类里面的虚函数。
std::cout << *(int *)p << std::endl;
std::cout << *((int **)(*(int *)p) + 0) << std::endl;
std::cout << *((int **)(*(int *)p) + 1) << std::endl;
std::cout << *((int **)(*(int *)p) + 2) << std::endl;
typedef void (*fun)();
for (int i = 0; i < 3; i++)
{
fun f1 = (fun)((void *)(*((int **)(*(int *)p) + i)));
f1();
}
return 0;
}
0 0
- C++ 通过虚函数表,直接外部访问类中的函数,并且脱离类
- 对于非虚函数可以直接通过指针访问,因为该类函数与类对象无关。
- php函数不能直接访问外部变量
- 通过虚函数表访问基类的私有虚函数
- C/C++—— 除了用类成员函数访问类私有成员变量外,还可以通过类对象地址来直接访问和修改类的私有成员变量
- 通过虚函数表访问private成员
- C++直接调用外部函数
- C/C++外部函数指针指向类内部函数
- 为什么可以通过函数指针访问类的私有函数
- 通过函数指针使用虚函数表中的函数
- C语言中的内部函数与外部函数
- 通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
- 通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
- C#Windows窗体界面设计_05_自定义函数 外部类访问读写窗体类的控件的私有属性
- c语言 外部函数
- 类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用
- python:将一个外部函数,转化为类中的方法
- 通过虚函数表 私有成员是可以访问的
- 删除目录及目录里面的文件
- 5W2H七何分析法
- 通讯录动态版本
- Java enum的用法详解
- app引导页(背景图片切换加各个页面动画效果)
- C++ 通过虚函数表,直接外部访问类中的函数,并且脱离类
- 内存字节转成字符串打印
- 大量的QT控件及示例发放
- Android中TextView不获取焦点可以实现跑马灯的效果
- 大数据系列修炼-Scala课程06
- Eclipse的SVN插件与本地svn客户端关联详解
- Xcode 真机调试: AVAudioPlayer 模拟器有声音,真机耳机有声音,扬音器没有声音的解决办法
- CAS单点登录(三)--服务端改造(登录页及登录方式的自定义)
- PDF文档需要OCR文字识别吗