多重繼承是c++語言獨有的繼承方式,其它幾乎所有語言都秉承了單一繼承的思想。這是因為多重繼承致命的缺陷導致的:
1.1.1 菱形缺陷
當繼承基類時,在派生類中就獲得了基類所有的資料成員副本。假如類b 從a1和a2兩個類多重繼承而來,這樣b類就包含a1、a2類的資料成員副本。
考慮如果a1、a2都從某基類派生,該基類稱為base,現在繼承關係如下:
我們c++語言來描述這種繼承關係:
class base;
class a1 :public base ;
class a2 :public base ;
class b :public a1,public a2 ;
那麼a1、a2都具有base的副本。這樣b就包含了base的兩個副本,副本發生了重疊,不但增加了儲存空間,同時也引入了二義性。這就是菱形缺陷,菱形缺陷時間是兩個缺陷:
1、子物件重疊
2、向上對映的二義性。
菱形缺陷的其中一種解決辦法將在c++世界裡最廣泛的使用虛擬繼承解決菱形缺陷的應用便是標準c++的輸入/輸出iostream;標準c++的輸入/輸出
虛繼承:無論有幾代的繼承關係,所有子類都將共享乙個基類的副本,節省了空間。
多繼承帶來的菱形問題
大多數物件導向語言都不支援多繼承,而在python中,乙個子類是可以同時繼承多個父類的,這固然可以帶來乙個子類可以對多個不同父類加以重用的好處,但也有可能引發著名的 diamond problem菱形問題 或稱鑽石問題,有時候也被稱為 死亡鑽石 菱形其實就是對下面這種繼承結構的形象比喻 這種繼承結構...
網絡卡自適應帶來的麻煩
碰到乙個比較麻煩的問題,同事原來的計算機上網正常,買了新的筆記本,插上原來的網線,一撥號就是987號錯誤,說沒有響應。我把自己的機子接那根網線,也是同樣的問題。而且把新機子搬到鄰居家卻可以正常上網。看來只能懷疑網線的問題了。他的舊機子是ibm的r51,網絡卡剛好是支援自適應線序的,而新機子的網絡卡是...
網絡卡自適應帶來的麻煩
碰到乙個比較麻煩的問題,同事原來的計算機上網正常,買了新的筆記本,插上原來的網線,一撥號就是987號錯誤,說沒有響應。我把自己的機子接那根網線,也是同樣的問題。而且把新機子搬到鄰居家卻可以正常上網。看來只能懷疑網線的問題了。他的舊機子是ibm的r51,網絡卡剛好是支援自適應線序的,而新機子的網絡卡是...