C++繼承體系

老司機的詩和遠方發表於2020-04-06

一個繼承體系的根數目,深度和扇出數是否合適,要取決於這個體系要模擬的領域和這個領域所需要的特性,繼承體系就好比一個有向圖。
1、根節點:某個類如果沒有基類,既不是任何類的子類,那麼在有向圖中就是根節點。
2、類深度:從根節點到該類最長的可能派生路徑中,所有經過類的數目,也就是說繼承的深度,有多少層的繼承。
3、類的扇出:在給定的繼承系統中,從這個類直接派生的類的數目,即該類的直接子類的數目。

派生的利弊

派生也就是繼承可以提高程式碼的閱讀性,同時增加程式碼的效率,使得程式碼更加的抽象。但也同時帶來了另外些不足,介面體系總會帶來許多虛派生和虛擬函式,程式的效率上會有所下降。
工廠設計模式就是介面設計類的一種體現,設計好各個模板,使用者需要什麼再進行細節化。

控制程式碼類

控制程式碼的方式也是常用的方式,所謂的控制程式碼就是,不是通過繼承的方式,而是通過在類裡面例項化一個指標物件。控制程式碼一般是非介面類!

模板和繼承

模板和繼承是C++的兩個強大特性,對於類體系的設計究竟應該基於模板還是基於繼承這個問題,C++程式設計師卻常常使感到疑惑,甚至混淆不清,模板和繼承設計出來的結果有時候卻很大。
例如對於stack模板設計,基於模板主要是型別不同。而基於抽象基類的派生設計存在比較多不足,在這一點上基於模板的設計更加簡潔直接,沒有缺陷。事實上繼承是存在很多弊端的,會使得程式碼的效率低下。

總結

雖然直接編寫或者是繼承體系是最容易實現的型別,又是最高效率。但是介面體系,物件工廠和控制程式碼體系都會利於程式庫版本之間的連結相容性。
能夠使用模板的時候就儘量選擇模板,防止不理智的使用繼承。

相關文章