现在的位置: 首页 > 综合 > 正文

解析C++虚函数表

2013年07月28日 ⁄ 综合 ⁄ 共 930字 ⁄ 字号 评论关闭

http://www.51cto.com/art/200712/62673.htm

 

里面给出的例子个人感觉不够好,应该用成员函数指针而不应该用函数指针。否则无法传递成员。。我给出的例子如下

 

  1. #include "stdafx.h"
  2. #include <iostream>
  3. using namespace std;
  4. class Base
  5. {
  6. private:
  7.     int i;
  8.     public:
  9.         Base():i(1)
  10.         {}
  11.         virtual void f()
  12.         {
  13.             cout << this->i << endl;
  14.         }
  15. };
  16. class De: public Base
  17. {
  18. private:
  19.     int j;
  20. public:
  21.     De():
  22.       j(10)
  23.     {
  24.     }
  25.     void f()
  26.     {
  27.         cout << this->j << endl;
  28.     }
  29. };
  30. int _tmain(int argc, _TCHAR* argv[])
  31. {
  32.     //char abc[200];
  33.     typedef void (Base::*FUNP)(void);
  34.     Base* pb = new De();
  35.     int* pvft = (int*)pb;//pvft is the point to virtual fun table;
  36.     FUNP* pf = (FUNP*)(*pvft); //pf is the content of the firt element in vft (it should be the function pointer)
  37.     FUNP ptoFunction = (FUNP)(*pf);  //the pf should be a point to the function. why add another *????
  38.     //FUNP ptoFunction = &Base::f;
  39.     (pb->*ptoFunction)();
  40.     int i;
  41.     cin >> i;
  42.     return 0;
  43. }

抱歉!评论已关闭.