关于虚函数
来源:互联网 发布:手机网络摄像机软件 编辑:程序博客网 时间:2024/05/22 15:35
typedef void (*fun)();class A{public:A(){cout << "class A default constructor called" << endl;a = 0;}A(int param){cout << "class A constructor called" << endl;a = param;}~A(){}virtual void FunctionA(){cout << "classA FunctionA()" << endl;}virtual void FunctionB(){cout << "classA FunctionB()" << endl;}int a;static int staticA;private:};int A::staticA = 2;
int main(){ A aObj; fun funcA = (fun) *((int*)*(int*)(&aObj)); funcA(); fun funcB = (fun) *( (int*)*(int*)(&aObj) + 1); funcB(); while(1); return 0;}
1.(int*)(*aObj)得到了虚函数表指针的地址&vptr
2.(int*)*(int*)(*aObj)得到虚函数表指针vptr 指针的类型是(int*),这时需要转化下
3.vptr是指向vptr table,其实就是指向一个数组,数组元素是函数指针。
(int*)*(int*)(*aObj) 指向数组第一个元素 所以*((int*)*(int*)(*aObj))就是FunctionA的地址
(int*)*(int*)(*aObj) + 1 指向数组第二个元素,所以*((int*)*(int*)(*aObj) + 1) 就是FunctionB的地址
4.funcA(); funcB(); 这样就是调用相应的虚函数
0 0
- 关于虚函数表
- 关于virtual虚函数
- C# 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于c++虚函数
- 关于虚函数(一)
- 关于C++虚函数
- 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于虚函数
- 关于 [虚函数] 和 [虚函数表]
- 关于C++虚函数、纯虚函数
- C++::关于虚函数,纯虚函数
- windows使用ftp向inux传送文件
- Android编译过程
- class_SeqList.
- 三种方法链接MySQL
- Surround the Trees
- 关于虚函数
- c++ 纯虚函数与抽象类
- PHPExcel导出mysql数据库数据
- char与varchar的区别
- 面向对象知识点梳理(2)
- PinnedSectionListView(分组+可固定标题的ListView)
- hdoj 2647 Reward
- git clone permission denied(publickey)
- 苹果常见快捷方式