C++ 虚函数表 单继承
来源:互联网 发布:深圳unity3d培训 编辑:程序博客网 时间:2024/05/18 02:30
本文研究单继承情况下,c++对象的虚函数表的具体情况。
假设有两个类A,B, 其中B由A派生出来,A含有虚函数fun1,B含有虚函数fun2。
测试的代码如下:
#include<iostream>using namespace std;class A{public: virtual void fun1() { cout<<"A::fun1"<<endl; }};class B:public A{public: virtual void fun2() { cout<<"B::fun2"<<endl; } virtual void fun1() { cout<<"B::fun1"<<endl; }};typedef void (*Fun)(void);int main(int argc, char* argv[]){ B b; cout<<"虚函数表指针的地址为:"<<(int *)(&b)<<endl; cout<<"虚函数表的地址为:"<<*(int *)(&b)<<endl; cout<<"第一个虚函数fun1的地址为:"<<(int *) *(int *)(&b)<<endl; Fun fun1=( Fun) ( *(int *) *(int *)(&b)); fun1(); cout<<"第二个虚函数fun2的地址为:"<< (int *) ((int *) (*(int *)(&b))+1) << endl; Fun fun2=(Fun) (* ((int *) (*(int *)(&b))+1)); fun2(); return 0;}运行结果:
虚函数表指针的地址为:0xbfa9a77c虚函数表的地址为:134515592第一个虚函数fun1的地址为:0x8048b88B::fun1第二个虚函数fun2的地址为:0x8048b8cB::fun2
测试代码说明:
虚函数表指针 (int *)(&b)
虚函数表地址 *(int *)(&b)
虚函数表的第一个元素,也就是指向fun1的指针 (int * )(*(int *)(&b))
虚函数表的第二个元素,也就是指向fun2的指针 (int * )(*(int *)(&b)) + 1)
在这种单继承的情况下,如果有虚函数表,那么只有一个虚函数表,并且按照虚函数声明的顺序顺序排列,派生类的虚函数紧接着基类的虚函数排列,类B的虚函数表结果如下图所示:
0 0
- 【C++】c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- 【C++】c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- 单继承与虚函数表
- 单继承与虚函数表
- C++ 虚函数表 单继承
- 虚函数表以及单继承多继承对象模型
- 单继承与虚函数表(虚函数一)
- c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- c++单继承、多继承、菱形继承的内存布局(虚函数表结构)
- 单继承与多继承中的虚函数表和虚函数指针
- 虚函数总结 (一) 单继承虚表
- C++ 虚函数表研究 (一) 单继承
- [C++对象模型][7]单继承与虚函数表
- [C++对象模型][7]单继承与虚函数表
- 单继承条件下的虚函数列表
- C++ 类 内存分布 虚函数 单继承 多继承
- C++,继承、虚函数解惑!
- C++,继承、虚函数解惑!
- 嵌入式学习
- C#-面向对象的多态思想 ---ShinePans
- 3.1poj2972确定进制
- Linux下SVN 命令操作手册
- php封装图片上传类
- C++ 虚函数表 单继承
- C++中static的用法总结
- 继承与派生2
- 多少个0
- 01-06: Android当中常见控件
- 详解时间复杂度
- 求一个数阶乘的后面连续0的个数
- 数据库存储 层次、树形结构 的标准做法
- 铜像[天下]