c++虚函数表详解(一)
来源:互联网 发布:热重分析软件 编辑:程序博客网 时间:2024/05/07 16:33
问题1: 一个类对应一个虚函数表还是一个对象对应一个虚函数表?
#include <iostream>#include <tchar.h>using namespace std;class Human{public:virtual void Print(){cout << _T("Human::Print") << endl;}};int _tmain(int argc, TCHAR argv[], TCHAR envp[]){Human Modi;Human Negi;int* pModi = (int*)(&Modi);int* pNegi = (int*)(&Negi);int* AddrOfModiVTable = (int*)(*pModi);int* AddrOfNegiVTable = (int*)(*pNegi);cout << _T("Modi的虚函数表所在内存的首地址:") << AddrOfModiVTable << endl;cout << _T("Negi的虚函数表所在内存的首地址:") << AddrOfNegiVTable << endl;return 0;}
运行结果如下:
得出问题一的答案:一个类对应一个虚函数表。
int* pModi = (int*)(&Modi); 详细讲解:
&Modi :取得Human类对象Modi所在内存的首地址A。
(int*)&Modi :首地址A对应的指针类型是Human*,该语句将Human*强制转换成int*
此时pModi是一个int类型的指针,指向的内存地址是Modi所在的内存的首地址A,指向的内存块的大小是四个字节(假设int类型占用4个字节的内存空间)。
int* AddrOfModiVTable = (int*)(*pModi); 详细讲解:
*pModi :取出Modi所在的内存的前四个字节的空间所存储的内容B(B此时是一个int类型的数)。
(int*)(*pModi) :将内容B的类型由int强制转换成int*
此时AddrOfModiVTable的值就是Modi所在的内存的前四个字节的空间所存储的内容,并且该内容的类型是int*
而我们知道,Modi所在的内容的前四个字节的空间所存储的内容就是Modi的虚函数表所在内存的首地址。
- c++虚函数表详解(一)
- 虚函数详解(C++)
- c语言与lua交互(capi)介绍, lua调用C语言函数详解(一)
- C++之虚函数(一)纯虚函数详解
- python 函数 详解(一)
- C语言函数(一)
- [C++]函数对象(一)
- 函数重载 C++(一)
- C语言文件操作函数(ANSI)详解(一)
- C++中虚函数详解一
- Delphi Imm单元函数详解(一)
- BSONObj类中的函数详解(一)
- Python 内置函数详解(一)----Print
- DB2常用函数一:(字符串)详解
- Linux 信号详解一(signal函数)
- python 函数详解 一
- 编写一函数add()函数重载,函数模板(C++)
- C语言指针详解(一)
- C/C++调用MLu的入门程序
- 10个iPhone开发网站、论坛、博客
- JavaIO 5—RandomAccessFile类的使用
- Kscope 1.6.2 第一次亲密接触
- 博士毕业了,也写一些发文章的心得吧
- c++虚函数表详解(一)
- 倍感幸福的2件小事儿
- Dancing Links 模板
- 初学python遇到的几个问题
- js判断浏览器类型
- camera sensor i2c数据传输时序及其分析
- dreamweaver随记---css选择器
- 数据库测试——实用技巧及测试方法
- 异步IO之----APC