Professional Documents
Culture Documents
我的测试程序如下
#include "stdafx.h"
class mostbase1
{
public:
mostbase1():i(1){};
int i;
};
class mostbase2
{
public:
mostbase2():j(2){};
int j;
};
derived 类的内存布局如下:
pvoid* __vbct_base1; ----base1 类的虚基类表的地址,其中的值有变化,数据如下
----00 00 00 00 08 00 00 00 0C 00 00 00
pvoid* __vbct_base2; ----base2 类的虚基类表的地址,数据如下
----00 00 00 00 04 00 00 00 08 00 00 00
int i;
int j;
以下是我构想的 c 伪码,可能不太正确,因为汇编代码已经优化过
void f(derived* pderived)
{
----mostbase1* pbase1 = pderived;
mostbase1 *pbase1,*temp1;
if (pderived == 0)
{
temp1 = 0;
}
else
{
temp1 = (mostbase1*)(pderived+(pderived->__vbct_base1[1]));
}
pbase1 = temp1;