您的位置:首页 > 编程语言 > C语言/C++

c++虚函数表详解(七)

2011-11-06 09:55 633 查看
多重继承的派生类的虚函数表是什么样的?

#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那里继承而来的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: