#include using namespace std; class Base { public: virtual void f() { cout << 'Base::f' << endl; } virtual void g() { cout << 'Base::g' << endl; } virtual void h() { cout << 'Base::h' << endl; } }; typedef void(Fun)(void); //定义一个函数指针类型Fun int main(){ Base b; Fun pFun = NULL; cout << '虚函数表地址:' << (int)(&b) << endl; cout << '虚函数表 — 第一个函数地址:' << (int*)(int)(&b) << endl; // Invoke the first virtual function pFun = (Fun)((int)(int)(&b)); cout <<(int*)pFun<<endl; pFun();
//请仿造上面的方法,改动程序相应的语句,能够分别输出Base::g()和Base::h()的函数地址。 // (Fun)((int)(int)(&b)+0); // Base::f() // (Fun)((int)(int)(&b)+1); // Base::g() // (Fun)((int)(int)(&b)+2); // Base::h() }

|-----------------| | Base::f() | |-----------------| | Base::g() | |-----------------| | Base::h() | |-----------------|


原文地址: https://www.cveoy.top/t/topic/nOt2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录