C 虛繼承和虛基類詳解

2021-10-09 05:38:09 字數 640 閱讀 3308

多繼承(multiple inheritance)是指從多個直接基類中產生派生類的能力,多繼承的派生類繼承了所有父類的成員。儘管概念上非常簡單,但是多個基類的相互交織可能會帶來錯綜複雜的設計問題,命名衝突就是不可迴避的乙個。

多繼承時很容易產生命名衝突,即使我們很小心地將所有類中的成員變數和成員函式都命名為不同的名字,命名衝突依然有可能發生,比如典型的是菱形繼承,如下圖所示:

類 a 派生出類 b 和類 c,類 d 繼承自類 b 和類 c,這個時候類 a 中的成員變數和成員函式繼承到類 d 中變成了兩份,乙份來自 a–>b–>d 這條路徑,另乙份來自 a–>c–>d 這條路徑。

在乙個派生類中保留間接基類的多份同名成員,雖然可以在不同的成員變數中分別存放不同的資料,但大多數情況下這是多餘的:因為保留多份成員變數不僅占用較多的儲存空間,還容易產生命名衝突。假如類 a 有乙個成員變數 a,那麼在類 d 中直接訪問 a 就會產生歧義,編譯器不知道它究竟來自 a -->b–>d 這條路徑,還是來自 a–>c–>d 這條路徑。下面是菱形繼承的具體實現:

//間接基類a

classa{

C 虛繼承和虛基類詳解

多繼承 multiple inheritance 是指從多個直接基類中產生派生類的能力,多繼承的派生類繼承了所有父類的成員。儘管概念上非常簡單,但是多個基類的相互交織可能會帶來錯綜複雜的設計問題,命名衝突就是不可迴避的乙個。多繼承時很容易產生命名衝突,即使我們很小心地將所有類中的成員變數和成員函式都...

虛繼承和虛基類

虛繼承主要解決在多重繼承中的菱形繼承問題,也就是說 b和c類同時繼承了a類,然後d類繼承了b,c類,那麼d類的虛表就會有重複的函式指標。include using namespace std 虛基類 class person person person string name name name e...

虛基類和虛繼承

這算得上我個人的乙個總結上,其實也算不上什麼原創,只是為了過濾一下前輩的經驗,加深一下自己的記憶 虛繼承的目的是讓某個類做出宣告,承諾願意共享它的基類,被共享的那個基類就是虛基類 includeusing namespace std class a protected int a class b p...