c 基礎之繼承

2021-07-27 21:12:41 字數 2677 閱讀 4397

一.繼承的概念  

繼承(inheritance)機制是

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

二.繼承的引入

通過以下的手機發展史,我們可以看到,乙個新一代的手機,它的身上不光有它自己的重新開發出來的功能,還繼承了上一代手機的功能。同理此處講的繼承也一樣,派生類(也叫子類)繼承了其基類(也叫父類的物件,保持了其原有特性,並在其基礎上進行發展)

三.繼承的定義格式

class deriverclassname:acess-laber baseclassname

解釋1.deriverclassname:派生類(子類)

2.acess-laber:繼承型別:基類成員在派生類中的可見性。可分為三種繼承型別:public   protected   private

3.baseclassname:基類(父類名稱)

四.繼承關係中建構函式的呼叫順序

在引入呼叫順序之前,我們先看一段**:

也就是說,先呼叫的是基類的建構函式,在呼叫的是派生類的?其實不然,函式在按步執行的時候先進入的是派生類的建構函式體內,然後在派生類的建構函式的初始化列表中呼叫基類的建構函式,所以才會出現如圖列印的結果。同理析構函式的列印結果剛好與之相反,先列印~derive()再列印~base()。

五.繼承體系中的作用域

1. 在繼承體系中基類和派生類是兩個不同作用域。(所以在基類和派生類中若有兩個相同名字的函式,則其不會形成過載,因為它們的作用域不同,不滿足過載的條件)

2. 子類和父類中有同名成員,子類成員將

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

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

六.繼承與轉換--複製相容規則(以public繼承為前提)

1. 子類物件可以賦值給父類物件(切割/切片)-->賦值的那部分是子類繼承父類的部分

2. 父類物件不能賦值給子類物件-->程式會崩潰

3. 父類的指標/引用可以指向子類物件

4. 子類的指標/引用不能指向父類物件(可以通過強制型別轉換完成,但是強轉不安全,會導致程式崩潰)

七.友元與繼承

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

八.繼承與靜態成員

基類定義了static成員(可以被繼承),則整個繼承體系裡面只有乙個這樣的成員。無論派生出多少個子類,都只有乙個static成員例項。

九總結

1.     基類的private成員在派生類中是不能被訪問的,如果基類成員不想在類外直接被訪問

但需要在派生類中能訪問,就定義為protected。可以看出保護成員限定符是因繼承才出現的。

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

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

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

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

6. 在實際運用中一般使用都是public繼承,極少場景下才會使用protetced/private繼承.派生類的預設成員函式在繼承關係裡面,在派生類中如果沒有顯示定義這六個成員函式,編譯系統則會預設合成這六個預設的成員函式。

C 繼承之繼承基礎

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

C 基礎之繼承

在c 中,繼承的格式定義為 class 派生類類名 訪問限定符 基類類名1 訪問限定符 基類類名2 派生類特有的成員 訪問限定符有3種 public protected private。如果為private 表示私有繼承,即基類的所有公有或者保護成員成為派生類的私有成員 如果為protected 即...

C 基礎 繼承

繼承class 派生類 訪問限定符 基類 public protected private 類成員函式 友元函式 子類函式 類物件 子類繼承類父類所有的成員變數和成員函式。與訪問限定 符無關。訪問限定符只是限制了訪問。子類訪問父類成員變數,把父類成員變數訪問限制符,改為 protected 子類內部...