c 繼承 二 菱形繼承

2021-07-30 03:13:12 字數 1037 閱讀 1622

在c++(一)中,寫的程式是單繼承(即乙個子類只有乙個父類)

下面將寫乙個多繼承程式(即乙個子類有兩個或兩個以上的父類)

多繼承是c++的乙個缺陷

對上述**直接進行編譯會產生問題,問題在於dd.fun();

編譯器報錯很明確,它不知道這裡的fun函式是要訪問b中的還是c中的。解決這個問題有兩種方案,第一種是重寫,即在d中重新寫fun()函式,這樣編譯器在呼叫時就明確了。第二種方案是採用虛擬繼承,即在class b和class c的:後加乙個關鍵字virtual (class b :virtual public a)

**虛繼承在記憶體中的布局

需要注意的是虛函式和虛繼承沒有任何關係,不要搞混淆

菱形繼承 菱形虛擬繼承

菱形繼承 鑽石繼承 模型 拿如下 舉例 class person class student public person class teacher public person class graduate public student,public teacher void test 當派生類gr...

C 菱形繼承

在c 繼承體系中,有一類問題是永遠跑不掉的即菱形繼承問題。此類問題又被稱作鑽石繼承問題,只是一種較差的設計結構,剛好看到這個問題,特此總結一下。先來看一下菱形繼承的基本結構 a和b從基類base中繼承,而d多重繼承於a,b。那就意味著d中會有base中的兩個拷貝。因為成員函式不體現在類的記憶體大小上...

c 菱形繼承

單繼承 乙個子類只有乙個父類時稱為單繼承 多繼承 乙個子類有兩個或者兩個以上時這個繼承關係為多繼承 菱形繼承是多繼承的一種特殊情況 在繼承中子類會繼承父類的所有的成員,可以看出菱形繼承有資料冗餘和二義性的問題。assistant中會有person的兩份資料。可以從上面看出來我們的assistant中...