码迷,mamicode.com
首页 > 其他好文 > 详细

探索单继承对象模型

时间:2015-09-20 07:03:37      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:探索单继承对象模型

  • 探索单继承对象模型

class Base

{

public :

     virtual void func1()

    {

          cout<<"Base::func1" <<endl;

    }


     virtual void func2()

    {

          cout<<"Base::func2" <<endl;

    }


private :

     int a ;

};


class Derive :public Base

{

public :

     virtual void func1()

    {

          cout<<"Derive::func1" <<endl;

    }


     virtual void func3()

    {

          cout<<"Derive::func3" <<endl;

    }


     virtual void func4()

    {

          cout<<"Derive::func4" <<endl;

    }


private :

     int b ;

};


typedef void (* FUNC) ();


void PrintVTable (int* VTable)

{

     cout<<" 虚表地址>"<< VTable<<endl ;


     for (int i = 0; VTable[i ] != 0; ++i)

    {

          printf(" %d个虚函数地址 :0X%x,->", i , VTable[i ]);

          FUNC f = (FUNC) VTable[i ];

          f();

    }


     cout<<endl ;

}


void Test1 ()

{

     Base b1 ;

     Derive d1 ;


     int* VTable1 = (int*)(*( int*)&b1 );

     int* VTable2 = (int*)(*( int*)&d1 );


     PrintVTable(VTable1 );

     PrintVTable(VTable2 );

}


  • VS2008 IDE 监视窗口中的虚表

可以看到派生类Derive::func1重写基类Base::func1,覆盖了相应虚表位置上的函数。

ps:可以看到这里没有看到派生类Derive中的func3和func4,这两个函数就放在func2的后面,这里没有显示是VS的问题(bug)。

技术分享

技术分享


探索单继承对象模型

标签:探索单继承对象模型

原文地址:http://10622551.blog.51cto.com/10612551/1696423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!