C++虛擬函式表在虛繼承和繼承中的差別
阿新 • • 發佈:2018-11-10
下面的程式碼在gcc和VC中的結果
#include <cstdio> class A { public: virtual void funcaa() { printf("class A %s\n",__func__); } }; class AA:virtual public A { public: virtual void funcaa() { printf("class AA %s\n",__func__); } }; class B { public: virtual void funcbb() { printf("class B %s\n",__func__); } }; class BB:public B { public: virtual void funcbb() { printf("class BB %s\n",__func__); } }; class C { public: void funccc() { printf("class C %s\n",__func__); } }; class CC:virtual public C { public: void funccc() { printf("class CC %s\n",__func__); } }; int main(void) { A a; a.funcaa(); AA aa; aa.funcaa(); B b; b.funcbb(); BB bb; b.funcbb(); C c; c.funccc(); CC cc; cc.funccc(); printf("sizeof(A)=%d,sizeof(AA)=%d\n",sizeof(A),sizeof(AA)); printf("sizeof(B)=%d,sizeof(BB)=%d\n",sizeof(B),sizeof(BB)); printf("sizeof(C)=%d,sizeof(CC)=%d\n",sizeof(C),sizeof(CC)); return 0; }
gcc中:
VC14(VS2015)中:
Why?