C++虛擬函式bug

dongyu2013發表於2014-03-27

點選(此處)摺疊或開啟

  1. class Base{
  2. private:
  3.     virtual void f() { cout<<\"Base::f\"<<endl; }
  4.     virtual void g() { cout<<\"Base::g\"<<endl; }
  5. };

  6. class DeriveChild:public Base{

  7. };
  8. typedef void (*Fun)(void);
  9. void main()
  10. {
  11.    DeriveChild d;
  12.    Fun pFun=(Fun)*((int*)*(int*)(int*)(&d)+0);
  13.    pFun();
  14.    pFun=(Fun)*((int*)*(int*)(int*)(&d)+1);
  15.    pFun();
  16. }

點選(此處)摺疊或開啟

  1. class B
  2. {
  3. public:
  4.     virtual void fun()
  5.     {
  6.         cout<<\"Base fun called\"<<endl;
  7.     }
  8. };

  9. class D:public B
  10. {
  11. private:
  12.     virtual void fun()
  13.     {
  14.      cout<<\"driver fun called\"<<endl;
  15.     }
  16. };
  17. void main()
  18. {
  19.     B *p=new D();
  20.     p->fun();
  21. }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1131003/,如需轉載,請註明出處,否則將追究法律責任。

相關文章