多继承无虚函数覆盖下的vftb排列
来源:互联网 发布:java jre环境变量设置 编辑:程序博客网 时间:2024/05/18 01:12
#include <iostream>#include <string>#include <vector>#include <cctype>using namespace std;//多继承(无虚函数覆盖)//1) 每个父类都有自己的虚表,有多少个父类就有多少个虚指针//2) 子类的虚函数地址被放到了第一个父类的虚函数表中(排列顺序:先基类虚函数地址后子类虚函数地址)。(所谓的第一个父类是按照声明顺序来判断的)class Base1{public:int x1;virtual void f1(){cout << "Base1::f" << endl;}virtual void g1(){cout << "Base1::g" << endl;}};class Base2{public:int x2;virtual void f2(){cout << "Base2::f" << endl;}virtual void g2(){cout << "Base2::g" << endl;}};class Base3{public:int x3;virtual void f3(){cout << "Base3::f" << endl;}virtual void g3(){cout << "Base3::g" << endl;}};class Derive:public Base1,public Base2,public Base3{public:int y;virtual void f(){cout << "Derive::f" << endl;}virtual void g(){cout << "Derive::g" << endl;}};typedef void (*Fun)();int main(){Fun pFun;Derive derive;Derive *de = &derive;//通过获取private虚函数指针,如下((Fun)((*q)[3]))实现访问!void*** p = (void***)&derive; cout<<*p<<endl; // Base1Subobj 的 vptr,即指向Base1的虚函数表;cout<<**p<<endl; // 指向Base1的f1虚函数cout<<*(*p+1)<<endl;cout<<*(*p+2)<<endl; // 指向Derive的f虚函数cout<<*(*p+3)<<endl; // 指向Derive的g虚函数pFun = (Fun)(**p); //pFun为指向Base1::f1()的指针pFun();pFun = (Fun)(*(*p+1)); //pFun为指向Base1::g1()的指针pFun();pFun = (Fun)(*(*p+2)); //pFun为指向Derive::f()的指针pFun();pFun = (Fun)(*(*p+3)); //pFun为指向Derive::g()的指针pFun();system("pause");return 0;}
0 0
- 多继承无虚函数覆盖下的vftb排列
- 单一继承下虚函数覆盖时vftb的排列
- 多继承(含虚函数覆盖)vftb中虚函数排列
- C++程序运行时内存布局之----------无继承情况下的虚函数
- C++程序运行时内存布局之----------无继承情况下的虚函数
- C++程序运行时内存布局之----------无继承情况下的虚函数
- 继承类的重载函数及覆盖
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- C++继承:同名隐藏、覆盖,虚函数
- 继承中的函数覆盖
- 拥有虚函数覆盖的菱形继承及菱形虚拟继承
- C++ 无虚函数、无虚基类的继承内存模型
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取(二)
- C++虚函数实现&&单继承和多继承下的虚函数布局
- 从虚函数的内存构造谈C++继承中函数的覆盖与隐藏
- 2014.4.25.12.51_context_2014.4.25_Android种的Context详解
- Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
- Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
- IO多路复用之select总结
- Android SDk下的文件夹
- 多继承无虚函数覆盖下的vftb排列
- IPython extra space issue
- 中英文字体对照表
- 3.结构体与链表
- 在ARM linux上使用usb接口的触屏
- 第一个struct
- [C++]KMP算法实现
- LeetCode-21 Merge Two Sorted Lists(合并两个有序链表)
- 树形DP进阶之背包问题