天天看點

C++ 虛基類是什麼

有一個類A,A中有個成員 i

B和C都繼承了A

D又同時繼承了B和C

那麼D中的i是來自于B還是來自于C呢?

這時候就要用到虛基類(虛繼承)

此時B和C繼承的是同一個對象A,而不是2個A

這樣i都是來自于一個對象

#include<iostream>
using namespace std;

class A
{
    public:
    int i;
    void showa(){cout<<"i="<<i<<endl;}
};


class B:virtual public A      //此處采用虛繼承
{
    public:
    int j;
};


class C:virtual public A      //此處采用虛繼承
{
    public:
    int k;
};


class D:public B,public C
{
    public:
    int m;
};

int main()
{
    D d;
    d.i=4; //這個A中的i,是從B那邊繼承而來的,還是從C那邊繼承而來的呢?
            //是以B和C必須進行虛繼承,A是B和C的虛基類
            //若将虛繼承去掉,則編譯錯誤
    d.showa();
    return 0;
}      

繼續閱讀