c++基礎知識學習---第六天

本篇博客是作者在學習c++的過程中的筆記記錄,希望和各位讀者一起學習交流

文章目錄

繼承

  1. 繼承概念
    1. 類之間的關係(has-A、uses-A、is-A)
      1. has-A:包含關係,用以描述一個類有多個‘部件類’構成,實現has-A關係用類成員表示,即一個類中的數據成員是另一種已經定義的類
      2. uses-A:一個類部分地使用另一個類。通過類之間成員函數的相互聯繫,定義友元或對象參數傳遞實現
      3. is-A:稱爲“繼承”,關係具有傳遞性
    2. 繼承相關概念
      繼承是類之間定義地一種重要關係
      一個B類繼承A類,或稱從類A派生類B,類A稱爲基類(父類),類B稱爲派生類(子類)
    3. 派生類的定義
      1. 語法
        class 派生類名:基類名錶
        {
          數據成員和成員函數聲明
        };
      2. 基類名錶構成:
        訪問控制 基類名1,訪問控制 基類名2,… ,訪問控制 基類名n
      3. 訪問控制表示派生類對基類的繼承方式,使用關鍵字:
          public 公有繼承
          private 私有繼承
          protected 保護繼承
      4. c++中的繼承方式(public、private、protected)會影響子類的對外訪問屬性
    4. 繼承重要說明
      1. 子類擁有父類的所有成員變量和函數子類就是一種特殊的父類
      2. 子類對象可以當作父類對象使用
      3. 子類可以擁有父類沒有的方法和屬性
  2. 派生類的訪問控制
    派生類繼承了基類的全部成員變量和成員方法(除了構造和析構之外的成員方法),但是這些成員的訪問控制屬性,在派生的過程中是可以調整的。
    1. c++中的繼承方式會影響子類的對外訪問屬性
      public繼承:父類成員在子類中保持原有的訪問級別
      private繼承:父類成員在子類中變爲private成員
      protected繼承:父類中的public成員會變成protected
             父類中的protected成員仍然爲protected
             父類中private成員仍然爲private
    2. private成員在子類中依然存在,但是卻無法訪問。不論何種方式繼承基類,派生類都不能直接使用基類的私有成員
    3. c++中子類對外訪問屬性控制表:
      在這裏插入圖片描述
  3. 繼承中的構造和析構
    1. 類型兼容性原則
      類型兼容性原則是指在需要基類對象的任何地方,都可以使用公有派生類的對象來替代。通過公有繼承,派生類得到了基類中除構造函數、析構函數之外的所有成員
      類型兼容規則中所指的替代情況包括以下情況:

      1. 子類對象可以當作父類對象使用
      2. 子類對象可以直接賦值給父類對象
      3. 子類對象可以直接初始化父類對象
      4. 父類指針可以直接指向子類對象
      5. 父類引用可以直接引用子類對象

      子類就是特殊的父類(base *p = &child;)

    2. 繼承中的對象模型
      子類是由父類成員疊加子類新成員得到的
      繼承中的構造和析構:
      在子類對象進行構造時,需要調用父類構造函數對其繼承得來的成員進行初始化
      在子類對象進行析構時,需要調用父類析構函數對其繼承得到的成員進行清理

    3. 繼承中的構造析構調用原則
      1. 子類對象在創建時會首先調用父類的構造函數
      2. 父類的構造函數執行結束後,執行子類的構造函數
      3. 當父類的構造函數有參數時,需要在子類的初始化列表中顯示調用
      4. 析構函數調用的先後順序於構造函數相反

    4. 繼承與組合混搭情況下,構造與析構的調用原則
      先構造父類,再構造成員變量,最後構造自己
      先析構自己,再析構成員變量,最後析構父類

    5. 繼承中的同名成員變量處理方法
      當子類成員變量與父類成員變量同名時,子類依然從父類繼承同名成員,在子類中通過作用域分辨符“::”進行同名區分(在派生類中使用基類的同名成員,顯式地使用類名限定符),在默認情況下是使用子類的同名成員,同名成員存儲在內存中的不同位置

    6. 派生類中的static關鍵字
      基類定義的靜態成員,將被所有派生類共享
      根據靜態成員自身的訪問特性和派生類的繼承方式,在類層次體系中具有不同的訪問性質(遵守派生類的訪問控制)
      派生類中訪問靜態成員

      1. 類名::成員
      2. 對象名.成員
  4. 多繼承(不常用)
    1. 多繼承的應用:
      1. 多繼承概念
        一個類有多個直接基類的繼承關係稱爲多繼承
      2. 語法:
        class 派生類名:訪問控制 基類名1,訪問控制 基類名2,… ,訪問控制 基類名n
        {
        數據成員和成員函數聲明
        }
      3. 多繼承的派生類構造和訪問
        1. 多個基類的派生類構造函數可以在初始時調用基類構造函數初始化數據成員
        2. 執行順序與單繼承構造函數類似,多個直接基類構造函數執行順序取決於定義派生類時指定的各個繼承基類的順序
        3. 一個派生類對象擁有多個直接或間接基類的成員,不同成員訪問不會出現二義性。如果不同的基類有同名成員,派生類對象訪問時應該加以識別
          在這裏插入圖片描述
    2. 虛繼承
      如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明的名字進行訪問時,可能產生二義性。
      如果在多條繼承路徑上有一個公共的基類,那麼在繼承路徑的某處匯合點,這個公共基類就會在派生類的對象中產生多個基類子對象
      要使這個公共基類在派生類中只產生一個子對象,必須對這個基類聲明爲虛繼承,是這個基類成爲虛基類
      虛繼承聲明使用關鍵字 virtual
      在這裏插入圖片描述
      在加上virtual關鍵字後,會給類加上一些屬性
發佈了22 篇原創文章 · 獲贊 13 · 訪問量 4854
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章