C 之繼承(一)

2021-08-19 06:23:10 字數 1361 閱讀 7252

作為c++的三大特性之一的繼承有著舉足輕重的地位,下面將盡本人最大努力通俗地闡述清楚繼承這一特性。

正如本人名字所示,渣渣一枚,如有紕漏,還望包涵指正。

繼承——顧名思義,要有所有者和繼承者,這在c++裡分別叫做基類(父類),派生類(子類);子輩繼承父輩,子類繼承父類。

父類往往抽象,在子類得到細化具體。例如人都有手有腳,但人裡面又分男女,男的有小jj,女的就沒有。乙個父類可能會有多個子類,但是為了免去書寫那些從父類得到的相同的屬性或方法的麻煩(少敲**),便有了繼承。使用繼承,你就不用自己把父類的**搬過來了。當然,我們一般也不會是照搬的,往往會進行一下處理。接下來便是繼承方式:public、private、protected.

正如上面所說,我們往往不是照搬,要處理一下。在這之前先說一下子類單繼承的宣告:

class 《子類名》:《繼承型別》 《父類名》

;繼承方式如下表(從網上偷來的)所示:

首先,無論何種繼承方式,父類的私有成員(private)在子類雖然存在,但不可訪問。其次,pubilc繼承中,父類的public、protected在子類依然是public、protected;protected繼承中,父類的public、protected在子類中都變成protected;private繼承中,父類的public、protected在子類中都變成private。

嗯,,,看來繼承還是挺方便的,但是,要說的是,繼承是不會繼承父類的建構函式、析構函式的,至於怎麼處理,請移步c++繼承(二)。

但是,如果子類中定義了和父類同名的成員會怎麼樣?c++會隱藏子類中的那些和子類相同的父類的成員,也就是說,當你呼叫成員函式或變數時,會預設呼叫子類自己的。如果在這種重名情況下你要非要呼叫父類的成員的話,就要使用域解析符::, 比如在子類中呼叫base類中的getx()函式就要寫成base::getx()。

還有,上面提到的繼承只是乙個子類繼承乙個父類,但是如果乙個子類繼承多個父類,或者乙個子類繼承多個來自相同父類的父類,情況又會怎麼樣呢?

首先說多繼承,多繼承的宣告類似單繼承,

class 《子類名》:《繼承型別1> 《父類1名》,《繼承型別2> 《父類2名》,...;

多繼承中只是將不同的父類以及繼承型別用逗號隔開。

但是噹噹發生下圖所示(先忽略『虛繼承』這個詞)的繼承關係時:

當子類從不同途徑繼承同一基類時,子類

中會存在多份拷貝。這將浪費儲存空間而且存在二義性問題。

所以為了解決這些問題,便有了「虛繼承」,關於虛繼承,請移步c++繼承(三)。

c 之繼承(一)

一 繼承概念 在已有類的基礎上建立新類的過程 二 派生類 1 乙個 b 類繼承a類,或稱從類 a 派生類 b 2 類 a 稱為基類 父類 類 b 稱為派生類 子類 三 派生類三個步驟 1 吸收基類成員 全部吸收 構造 析構除外 但不一定可見 在c 的繼承機制中,派生類吸收基類中除建構函式和析構函式之...

C 之繼承 一

目錄4 無參建構函式與預設建構函式 5 繼承方式 1.1 什麼是類的繼承?單繼承派生類 class 派生類名 繼承方式 基類名 總結 基類的構造順序僅與子類繼承時的繼承順序有關,與建構函式的引數列表順序無關。該示例構造順序依次為 b c a。class b class c class a priva...

C 繼承之繼承基礎

一 繼承的相關概念 繼承是 種復 段,在繼承關係 子類繼承父類的成員,由此達到復 的 的。通過繼承定義乙個類,繼承是型別之間的關係建模,共享公有的東西,實現各自本質不同的東西。二 三種訪問限定符 繼承關係 三 繼承的重要說明1.子類擁有父類的所有成員變數和成員函式 2.子類就是一種特殊的父類 3.子...