C++类之虚函数表没有虚继承的菱形继承 参考代码#includeiostreamclassA{public:A(int_a){a_a;std::coutA::A()\r\n;}virtualvoidfun(){std::coutvirtual void A::fun()\r\n;}virtualvoidfunA(){std::coutvirtual void A::funA()\r\n;}virtualvoidfunAA(){std::coutvirtual void A::funAA()\r\n;}virtual~A(){std::coutvirtual A::~A()\r\n;}private:inta;};classB:publicA{public:B(int_b):A(555){b_b;std::coutB::B()\r\n;}virtualvoidfun(){std::coutvirtual void B::fun()\r\n;}virtualvoidfunB(){std::coutvirtual void B::funB()\r\n;}virtualvoidfunBB(){std::coutvirtual void B::funBB()\r\n;}virtual~B(){std::coutvirtual B::~B()\r\n;}private:intb;};classC:publicA{public:C(int_c):A(666){c_c;std::coutC::C()\r\n;}virtualvoidfun(){std::coutvirtual void C::fun()\r\n;}virtualvoidfunC(){std::coutvirtual void C::funC()\r\n;}virtualvoidfunCC(){std::coutvirtual void C::funCC()\r\n;}virtual~C(){std::coutvirtual C::~C()\r\n;}private:intc;};classD:publicB,publicC{public:D(int_d):B(777),C(888){d_d;std::coutD::D()\r\n;}virtualvoidfun(){std::coutvirtual void D::fun()\r\n;}virtualvoidfunD(){std::coutvirtual void D::funD()\r\n;}virtualvoidfunDD(){std::coutvirtual void D::funDD()\r\n;}virtual~D(){std::coutvirtual D::~D()\r\n;}private:intd;};intmain(){D obj{444};std::coutsizeof(obj): sizeof(obj)\r\n;for(inti0;i7;i){std::cout((int*)(obj)i)\t*((int*)(obj)i)\r\n;}typedefvoid(*Fun)();Fun pF1nullptr;std::cout(int*)*((int*)(obj) 0) a[i]\r\n;inta[]{0,1,2,3,4,5,6,7};for(inti0;isizeof(a)/sizeof(int);i){if(a[i]3){std::cout((int*)*((int*)(obj)0)a[i])\t这里应该是virtual D::~D()\r\n;}else{std::cout((int*)*((int*)(obj)0)a[i])\t;pF1(Fun)*((int*)*((int*)(obj)0)a[i]);pF1();}}std::cout(int*)*((int*)(obj) 3) b[i]\r\n;intb[]{0,1,2,3,4,5};for(inti0;isizeof(b)/sizeof(int);i){if(b[i]3){std::cout((int*)*((int*)(obj)3)b[i])\t这里应该是virtual D::~D()\r\n;}else{std::cout((int*)*((int*)(obj)3)b[i])\t;pF1(Fun)*((int*)*((int*)(obj)3)b[i]);pF1();}}return0;}运行结果