C++多繼承下的虛函數表(C++學習)

         在學習C++的多態實現時,曾經有這樣的疑問: 假設派生類繼承了多個基類,基類裏都有虛函數, 也就是說派生類繼承了多個虛表, 那派生類他自己的虛函數放在哪個虛表中呢?
 
 
         在論壇裏請教了各位大牛後,這個問題很快的解決了,我們通過代碼來測試:
class A
{
    public:
        virtual void a1(void){ cout<<"a1"<<endl; }
        virtual void a2(void){ cout<<"a2"<<endl; }
};

class B
{
    public:
        virtual void b1(void){ cout<<"b1"<<endl; }
        virtual void b2(void){ cout<<"b2"<<endl; }
};

class C : public A,B
{
    public:
        virtual void c1(void){ cout<<"c1"<<endl; }
        virtual void c2(void){ cout<<"c2"<<endl; }
};

經測試,那麼派生類C的虛表有兩個,分別排列如下
虛表1:父類A虛表 + 派生類C自身虛表
虛表2:父類B虛表

如果是class C : public B,A
那麼情況就變成
虛表1:父類B虛表 + 派生類C自身虛表
虛表2:父類A虛表
 
最後我們得到結論: 派生類自己的虛表是放在第一個父類的虛表後面的.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章