C 多繼承帶來的麻煩

2021-06-09 22:14:02 字數 627 閱讀 1876

多重繼承是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,網絡卡剛好是支援自適應線序的,而新機子的網絡卡是...