C 之繼承篇

2021-07-27 09:58:37 字數 2847 閱讀 8855

c++——繼承篇

1

、基本概念:

繼承(inheritance)機制是物件導向程式設計使**可以復用的最重要的手段,它允許程式設計師在保持 原有類特性的基礎上進行擴充套件,增加功能。這樣產生新的類,稱派生類。繼承呈現了物件導向程式設 計的層次結構,體現了由簡單到複雜的認知過程。

2

、繼承格式及特性:

class

派生類名:繼承方式

基類名1

,繼承方式

基類名2

,...

,繼承方式

基類名n

。c++

中,class

預設繼承型別為

private

,struct

預設繼承型別為

繼承體系中的作用域:

(1)在繼承體系中基類和派生類是兩個不同作用域。

(2)子類和父類中有同名成員,子類成員將遮蔽父類對成員的直接訪問。(在子類成員函式中,可以 使用 基類::基類成員 訪問)--隱藏 --重定義 。

(3)注意在實際中在繼承體系裡面最好不要定義同名的成員。

4.

繼承與轉換

--賦值相容規則

--public

繼承:(1)子類物件可以賦值給父類物件(切割/切片)。

(2)父類物件不能賦值給子類物件。

(3)父類的指標/引用可以指向子類物件。

(4)子類的指標/引用不能指向父類物件(可以通過強制型別轉換完成)。

5.

友元與繼承:

友元關係不能繼承,也就是說基類友元不能訪問子類私有和保護成員。

6.

【繼承關係中構造函式呼叫順序】

呼叫派生類的建構函式———呼叫基類建構函式,呼叫順序按照它們被繼承時宣告的順序(從左到右)———呼叫內嵌成員物件的建構函式,呼叫順序按照它們在類中宣告的順序———派生類的建構函式體中的內容。

【繼承關係中析構函式呼叫過程】

派生類析構函式———派生類包含物件的析構函式­———基類析構函式

7.

單繼承&

多繼承&

菱形繼承:

【單繼承】 乙個子類只有乙個直接父類時稱這個繼承關係為單繼承。

【多繼承】 乙個子類有兩個或以上直接父類時稱這個繼承關係為多繼承。

【菱形繼承】

虛繼承--解決菱形繼承的二義性和資料冗餘的問題

(1)虛繼承解決了在菱形繼承體系裡面子類物件包含多份父類物件的資料冗餘&浪費空間的問題。

(2)虛繼承體系看起來好複雜,在實際應用我們通常不會定義如此複雜的繼承體系。一般不到萬不得 已都不要定義菱形結構的虛繼承體系結構,因為使用虛繼承解決資料冗餘問題也帶來了效能上的 損耗。

8

、派生類生成:

(1)吸收基類成員(除構造析構函式以外的所有成員);

(2)改造基類成員(根據繼承方式調整基類成員的訪問,同名函式在子類中的隱藏,以及虛函式在子類中的覆蓋);

總結:1. 基類的private成員在派生類中是不能被訪問的,如果基類成員不想在類外直接被訪問,但需要 在派生類中能訪問,就定義為protected。可以看出保護成員限定符是因繼承才出現的。

2. public繼承是乙個介面繼承,保持is-a原則,每個父類可用的成員對子類也可用,因為每個子類 物件也都是乙個父類物件。

3. protected/private繼承是乙個實現繼承,基類的部分成員並非完全成為子類介面的一部分, 是 has-a 的關係原則,所以非特殊情況下不會使用這兩種繼承關係,在絕大多數的場景下使用的 都是公有繼承。私有繼承以為這is-implemented-in-terms-of(是根據……實現的)。通常比 組合(composition)更低階,但當乙個派生類需要訪問基類保護成員或需要重定義基類的虛函 數時它就是合理的。

4. 不管是哪種繼承方式,在派生類內部都可以訪問基類的公有成員和保護成員,基類的私有成員存 在但是在子類中不可見(不能訪問)。

5. 使用關鍵字class時預設的繼承方式是private,使用struct時預設的繼承方式是public,不過最 好顯示的寫出繼承方式。

6. 在實際運用中一般使用都是public繼承,極少場景下才會使用protetced/private繼承.

7.派生類中由基類繼承而來的成員的初始化工作還是由基類的建構函式完成,然後派生類中新增的成員在派生類的建構函式中初始化。

8.如果基類中沒有不帶引數的建構函式,那麼在派生類的建構函式中必須呼叫基類建構函式,以初始化基類成員。

C 之繼承篇

1.繼承許可權 繼承許可權與訪問許可權 public 公有訪問 protected 保護訪問 private 私有訪問 public 公有繼承 繼承後變成public 公有訪問 繼承後變成protected 保護訪問 繼承後不可訪問 protected 保護繼承 繼承後變成protected 保護訪...

C 學習之繼承篇

今天通過對實驗二繼承,過載,覆蓋的學習,讓我更深一步理解了這些概念的區別。首先來明確乙個概念,函式名即位址,也就是說函式名就是個指標。編譯階段,編譯器為每個函式的 分配乙個位址空間並編譯函式 到這個空間中,函式名就指向這個位址空間。也即每個函式名都有自己唯一的 空間。同理,類的成員函式也是如此。但是...

c 學習之繼承篇(多重繼承之虛繼承)

虛繼承 是物件導向程式設計中的一種技術,是指乙個指定的基類,在繼承體系結構中,將其成員資料例項共享給也從這個基型別直接或間接派生的其它類。形式 在繼承定義中包含了virtual關鍵字的繼承關係,如下圖中,類a就叫做虛基類。虛擬繼承是多重繼承中的菱形繼承所特有的概念。虛擬基類是為解決多重繼承而出現的。...