C 多繼承與虛繼承

2021-09-02 17:51:35 字數 1104 閱讀 8800

目錄

多繼承與虛繼承以及存在的問題 例子

虛繼承有了多繼承,虛繼承才會有意義

如果有個菱形結構的繼承,爺爺類為a,然後b,c是a的派生類,最後d是b和c的派生類,

如果在a中有乙個成員變數a,d去呼叫就會出現訪問不明確,

虛繼承就可以解決訪問不明確的這種問題

如果這樣繼承b,c虛繼承了a,virtual public,然後d繼承b,c

通常的理解方式!

在虛繼承之後,a裡面的成員變數a是不複製給b和c的,而是只給了b和c使用權,所以d也只有使用權

多繼承,虛繼承不建議用,結構複雜,記憶體開銷比較大。

用菱形的結構簡單的就可以了,可讀性比較好

這裡的a叫做虛基類

採用多繼承,會出現訪問不明確的問題。

如下**:

#include using namespace std;

class a

int m_valuea;

void print()

};class b: public a;

class c: public a;

class d: public b, public c;

int main()

執行報錯截圖如下:

此時採用虛繼承就能很好的解決這個問題:

**如下:

#include using namespace std;

class a

int m_valuea;

void print()

};class b: virtual public a;

class c: virtual public a;

class d: public b, public c;

int main()

執行截圖如下:

C 多繼承 虛繼承

一,多繼承 include include using namespace std class b1 繼承類c void main 主函式 c類按照順序繼承b2,b1,b4,b3 再按照資料成員定義順序 memberb1,memberb4,memberb3,memberb2 最後是自己的構造器 二,...

C 的多繼承與虛繼承

乙個類有多個直接基類的繼承關係稱為多繼承 多繼承宣告語法 class 派生類名 訪問控制 基類名1,訪問控制 基類名2,類 c 可以根據訪問控制同時繼承類 a 和類 b 的成員,並新增自己的成員 如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生...

C 多繼承 菱形繼承 虛繼承

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 ...