C 多繼承 菱形繼承 虛繼承

2021-08-18 13:01:37 字數 858 閱讀 8849

b和c都單繼承了a

d繼承了b和c 是多繼承 有兩個或兩個以上的基類就是多繼承

class  a

public:

int ma;

};class b : public a

public:

int mb;

};class c : public a

public:

int mc;

};class d : public b, public c

public:

int md;

};

菱形繼承造成的問題:就是d中有兩份a中的資料ma 就是所謂的二義性 編譯都通不過

為了解決這個問題 可以用虛繼承來解決 

虛繼承的原則就是:誰從a直接繼承 就讓誰虛繼承a

b和c虛繼承a

class  a

virtual void show()

public:

int ma;

};class b : virtual public a

public:

int mb;

};class c : virtual public a

public:

int mc;

};class d : public b, public c

public:

int md;

};

b、c都從a虛繼承 此時a成為虛基類 這樣就可以解決d中有兩份a資料的問題 解決了二義性的問題

繼承(單繼承 多繼承 菱形繼承 虛繼承)

一 單繼承 單繼承是一種 乙個子類只有乙個直接父類 的繼承關係。二 多繼承 多繼承是一種 乙個子類有兩個或兩個以上直接父類 的繼承關係。三 菱形繼承 菱形繼承由兩個 或以上 單繼承,乙個多繼承構成,結構如下 顯然,上例中assistant類多繼承了student和teacher兩個類,而studen...

C 繼承6 虛繼承 菱形繼承

建立 1.farmer類,資料成員 m strname,成員函式 構造 析構 sow 2.worker類,資料成員 m strcode,成員函式 構造 析構 carry 3.migrantworker類,資料成員 無,成員函式 構造 析構 4.person類,資料成員 m strcolor,成員函式...

c 多重繼承 虛繼承 菱形繼承

多重繼承的特性和使用和單繼承沒區別。按照單繼承來使用即可。多重繼承可能會引入乙個 菱形繼承的問題 這個問題其實並不算問題,因為它合情合理,即多個基類 擁有乙個共同的基類,那麼在構造的時候,由於構造的遞迴特性,就會出現共同基類出現兩份例項的 情況,而且如果針對性修改,那麼如果不在訪問共同基類的時候先指...