c++虚函数表详解(七)
2011-11-06 09:55
633 查看
多重继承的派生类的虚函数表是什么样的?
上述代码的执行结果如下“
用图片说明如下:
图中省略了虚函数表中的NULL项
Modi的第一个虚函数表是从Father继承过来的还是从Mother继承过来的,取决于继承的顺序。
如果是Class Son: Public Father, Public Mother,那么第一个虚函数表是从Father那里继承而来的;
如果是Class Son: Public Mother, Public Father,那么第一个虚函数表是从Mother那里继承而来的。
#include <iostream> #include <tchar.h> using namespace std; class Father { public: virtual void walk() { cout << _T("Father::walk") << endl; } }; class Mother { public: virtual void speak() { cout << _T("Mother::speak") << endl; } }; class Son: public Father, public Mother { }; int _tmain(int argc, TCHAR argv[], TCHAR envp[]) { Son Modi; cout << _T("Modi的大小为") << sizeof(Modi) << endl; int* pModi = (int*)(&Modi); int* AddrOfModiVTable1 = (int*)(*pModi); // 从Father那里继承的虚函数表 int* AddrOfModiVTable2 = (int*)(*(++pModi)); // 从Mother那里继承的虚函数表 typedef void(*FUNC)(); FUNC pFunc = (FUNC)(*AddrOfModiVTable1); pFunc(); pFunc = (FUNC)(*AddrOfModiVTable2); pFunc(); return 0; }
上述代码的执行结果如下“
用图片说明如下:
图中省略了虚函数表中的NULL项
Modi的第一个虚函数表是从Father继承过来的还是从Mother继承过来的,取决于继承的顺序。
如果是Class Son: Public Father, Public Mother,那么第一个虚函数表是从Father那里继承而来的;
如果是Class Son: Public Mother, Public Father,那么第一个虚函数表是从Mother那里继承而来的。
相关文章推荐
- c++虚函数表详解(二)
- C++ 类中有虚函数(虚函数表)时 内存分布详解
- c++虚函数表详解(八)
- C++ 虚函数表及调用规范详解
- C++对象内存分布详解(包括字节对齐和虚函数表)
- 详解C++虚函数表(转载)
- c++虚函数表详解(三)
- 详解C++虚函数表(转载)
- c++虚函数表详解(五)
- c++虚函数表详解(九)
- c++虚函数表详解
- c++字符串详解(转)
- linux下c++多线程详解,应用于UDP
- c++程序链接的过程原理详解
- C/C++程序编译步骤详解
- 详解虚函数表
- C++引用详解
- C++ - 函数模板(function template) 的 重载(overload) 详解 及 代码
- 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
- C++中引用符&详解