#include <iostream> using namespace std; class Grail { public: virtual void _A() { cout<<"Grail::_A()"<<endl; } virtual void _B() { cout<<"Grail::_B()"<<endl; } virtual void _C() { cout<<"Grail::_C()"<<endl; } }; int main() { typedef void (*pFun)();//函数指针。 Grail g; for(int i=0;i<3;i++) { pFun pfun = (pFun)*((int *)(*(int *)(&g))+i); pfun();//取得虛表对应的函数。 } }
心得:C++ Class 的完整virtual function 在编译时期就固定下来了,程序没有办法在执行期间动态的增加或者取代其中莫一个。所以虚拟调用操作得以有做快的派送结果,付出的成本则是执行期的弹性。
时间: 2024-10-12 11:30:30