虚函数表

假设有类:

class Base {

     public:

            virtual void f() { cout << "Base::f" << endl; }

            virtual void g() { cout << "Base::g" << endl; }

            virtual void h() { cout << "Base::h" << endl; }

 

};

 则:

            Base b;

            cout << "虚函数表地址:" << (int*)(&b) << endl;

            cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;

实际运行经果如下:

虚函数表地址:0012FED4

虚函数表 — 第一个函数地址:0044F148

             ((int*)*(int*)(&b)+0);  // Base::f()函数的地址

          ((int*)*(int*)(&b)+1);  // Base::g()函数的地址

          ((int*)*(int*)(&b)+2);  // Base::h()函数的地址

图解:

继承:

Derive d; 的虚函数表如下

 

 

posted @ 2013-04-02 19:26  _HK_  阅读(232)  评论(0编辑  收藏  举报