struct E : public B, public C, public D { long e; void ABC() { e = 10; } };
上面将有三个虚函数表,因为B、C和D都各自带了一个虚函数表(因为从A派生)。
结果上面等同于:
struct E
{
void ( E::*B_pF )(); long B_a, b;
void ( E::*C_pF )(); long C_a, c;
void ( E::*D_pF )(); long D_a, d; long e; void ABC() { e = 10; } E();
void E_C_thunk_ABC() { this = ( E* )( ( ( char* )this ) - 12 ); ABC(); }
void E_D_thunk_ABC() { this = ( E* )( ( ( char* )this ) - 24 ); ABC(); }
};
void ( E::*E_BVF[] )() = { E::ABC, E::BCD };
void ( E::*E_CVF[] )() = { E::E_C_thunk_ABC, E::BCD };
void ( E::*E_DVF[] )() = { E::E_D_thunk_ABC, E::BCD };
E::E() { B_pF = E_BVF; C_pF = E_CVF; D_pF = E_DVF; }










