C++虛擬函式表呼叫學習
阿新 • • 發佈:2019-01-08
知識點是看 陳皓大哥的部落格,程式碼也參考了他的,不過做了很小的改動。
#include "stdio.h" class Base { public: virtual void Fun1() { printf("Call Base Fun1\n"); } virtual void Fun2() { printf("Call Base Fun2\n"); } virtual void Fun3() { printf("Call Base Fun3\n"); } private: virtual void Fun4() { printf("Call Base Fun4\n"); } }; class Derived : public Base { public: virtual void Fun1() { printf("Call Derived Fun1\n"); } virtual void Fun5() { printf("Call Fun5\n"); } }; typedef void(*Fun)(void); void main(void) { Derived lDerived; int** lpVtableAdd = (int**)&lDerived; for (int i = 0; i< 5; ++i) { Fun lpFun = (Fun)(lpVtableAdd[0][i]); lpFun(); } printf("First add of Base:%d, and first virtual Fun add:%d\n",(int*)(&lDerived),&lpVtableAdd); }
看懂了這些程式碼 應該對虛擬函式表就清楚啦吧,O(∩_∩)O~