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

探索多重继承的内存布局

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

标签:探索多重继承的内存布局

  • 探索多重继承的内存布局

class Base1

{

public :

     virtual void func1()

    {

          cout<<"Base1::func1" <<endl;

    }


     virtual void func2()

    {

          cout<<"Base1::func2" <<endl;

    }


private :

     int b1 ;

};


class Base2

{

public :

     virtual void func1()

    {

          cout<<"Base2::func1" <<endl;

    }


     virtual void func2()

    {

          cout<<"Base2::func2" <<endl;

    }


private :

     int b2 ;

};



class Derive : public Base1, public Base2

{

public :

     virtual void func1()

    {

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

    }


     virtual void func3()

    {

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

    }


private :

     int d1 ;

};


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 ()

{

     Derive d1 ;


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


     PrintVTable(VTable );


     // Base2虚函数表在对象Base1后面

     VTable = (int *)(*((int*)&d1 + sizeof (Base1)/4));

     PrintVTable(VTable );

}


技术分享


探索多重继承的内存布局

标签:探索多重继承的内存布局

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

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