C 多型之繼承7 多重繼承

2021-07-09 05:44:27 字數 1508 閱讀 5268

之前我們列舉的所有例子都是單一的繼承--每乙個繼承類有且只有乙個父類。然而,c++提供了多重繼承的功能,多重繼承使得派生類能從多個父類繼承成員。

下面是乙個多重繼承的列子

};多重繼承的問題多重繼承看似是對單一繼承的擴充套件,實際上多重繼承存在很多問題,這些問題增加了程式的複雜性以及維護難。讓我們看看下面這個例子

class usbdevice

long getid() };

class networkdevice

long getid() };

class wirelessadaptor: public usbdevice, public networkdevice};

int main()

程式中存在的問題是物件c54g包含兩個getid()函式,乙個是繼承自usbdeivce,另外乙個繼承自networkdevice。因此對這個函式的呼叫時含糊不清的,編譯器會給出錯誤提示。

針對上面的問題,c++提供了方法來解決:明確的指明呼叫那個版本的函式。使用如下:

int main()

上面的環境還算是比較簡單的,如果乙個類繼承了6個或者更多的基類,那問題將更多。其次,更加嚴重的問題是:鑽石問題,如下面的例子:

上面的例子中有不少問題,包括copier是否應該有乙個還是兩個powereddeivce的拷貝,如何解決不同型別的模糊引用。當然大多數問題可以通過指定明確的域來解決,但是最大的問題是它增加了複雜度,使開發時間大大增加。所以在使用多重繼承的時候要慎重考慮,不到萬不得已的時候,就不要使用。

C 多重繼承的多型 Thunk

1 classa 2 3classb 4 5class c public a,publicb 6 7b b newc 8 9b foo virtual function 在為line 9實現多型的時候,b指向的不是c物件的開頭,而是其subobject b的開頭。因此在呼叫foo時,作為引數的thi...

多重繼承 Python的封裝繼承多型和多重繼承

相信你一定知道繼承,多型和封裝。封裝通常是為了提供統一介面而將具體實現過程或者屬性以方法或者類的方式對外呈現 繼承就是子類繼承父類從而擁有父類的方法和屬性 多型是繼承了同乙個父類的不同子類分別重寫了父類的某個方法而使得這個方法在不同的子類中有不同的實現。多重繼承即子類繼承多個父類,擁有多個父類的方法...

c 繼承 多重繼承 多型性 虛函式

從繼承的角度來看,y 所繼承到的成員 x 的資料成員 的訪問屬性 x作為y 的成員,屬性是由繼承方式決定的,訪問屬性可由普通成員屬性推理理解 多重繼承的訪問屬性 可按照 上邊 繼承加遞迴的思想理解 多型性virtual this 編譯器幫助我們簡化操作,通過虛函式 方便多多 總結c 讓編譯器多做點工...