Geekband C++ 第二周

第一部分:有指針成員數(shù)據(jù)的類

  • 概述:成員數(shù)據(jù)有指針,在設計類時需要注意拷貝構造,拷貝賦值和析構的實現(xiàn)方式
  • 編譯器會生成默認的拷貝構造和拷貝賦值函數(shù),但僅僅是對指針成員的復制,這樣的構造和賦值會導致內存泄漏問題
  • 三大函數(shù)
    1. 析構函數(shù)
    - 需要釋放指針所指向的對象
    2. 深拷貝和淺拷貝
    - 深拷貝:不僅拷貝指針并拷貝指針指向的內容
    3. 拷貝構造函數(shù):String s2(s1)
    4. 賦值構造函數(shù):String s2=s1
    - 檢查是否自我賦值
    - 釋放s2中指針所指向的內容
    - 為s2開辟足夠大的空間
    - 將s1的內容拷貝到s2中
    5. String類的<<運算符重載(屬于復習內容)
    - 是否可以定義成成員函數(shù)?這樣做好不好?(寫成成員函數(shù),會與傳統(tǒng)用法不一致)
  • 堆,棧和內存管理
    1. Stack:存在于某作用域的一塊內存空間
    2. Heap:又操作系統(tǒng)提供的一塊global內存空間,程序可以動態(tài)分配從中獲取若干區(qū)域
    3. Stack object:在作用域中定義的變量,生存期在作用域結束之際結束,又稱為auto object
    4. Static local object:生存期在作用域結束之后仍然存在,直到整個程序結束
    5. global object:生存期在整個程序結束之后才結束
    6. heap object
    - 用new和delete開辟和釋放內存空間
    - Complex類(成員函數(shù)沒有指針)的new和delete過程
    - String類(成員函數(shù)沒有指針)的new和delete過程
    7. static
    - 靜態(tài)函數(shù),不會隱藏有this指針
    - static成員數(shù)據(jù)定義,在類外
    - double Account::m_rate = 8.0 (可以不賦值,也可以賦值)
  • 隨筆:
    1. 在類函數(shù)中,可以寫明this,可以讓編譯器加this

第二部分:組合與繼承:

  • 概述:學習了class(帶指針和不帶指針)的設計方法,可以利用類和類的各種關系解決實際問題,概況起來類和類有:
    1. 復合(composition)
    2. 委托(delegation)
    3. 繼承(inheritance)

  • 復合
    1. 從內存的角度解釋復合關系:如:圖1


    圖1:復合的內存解釋

    2. 復合關系下的構造與析構:
    - 構造過程由內而外
    - 析構過程由外而內

  • 委托:如圖 2
    1. 圖2非常有名的設計模式:handle/body 或 implement by pointer
    2. String類有一個指向StringReq的指針,StringReq實現(xiàn)實際的功能,StringReq的改變不影響用戶使用String(編譯防火強,String不用重復編譯)


    圖2:委托關系
  • 繼承:表示is-a的關系
    1. 繼承和虛函數(shù)搭配才有價值
    2. 繼承的內存表示:如圖3


    圖3:繼承的內存表示

    3. 構造:由內而外(先父類再子類)
    4. 析構:有外而內(先子類再父類)

  • 繼承和虛函數(shù)
    1. 成員數(shù)據(jù)的繼承:從內存角度理解
    2. 成員函數(shù)的繼承:從調用權理解
    3. 成員函數(shù)分類:
    - non-virtual函數(shù):不希望繼承類重新定義
    - virtual函數(shù):希望繼承類重新定義(override),而且有默認定義
    - 純虛函數(shù):希望繼承類一定要重新定義,沒有默認定義(其實可以有定義,屬于高級用法)
    4. 繼承和虛函數(shù)的例子:template method設計模式,如圖4


    圖4:Template method
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 7.三大函數(shù):拷貝構造,拷貝賦值,析構 無指針的類,不需要寫拷貝構造和拷貝賦值。類內帶指針,一定要寫拷貝構造和拷貝...
    hui1429閱讀 406評論 0 0
  • C++文件 例:從文件income. in中讀入收入直到文件結束,并將收入和稅金輸出到文件tax. out。 檢查...
    SeanC52111閱讀 3,090評論 0 3
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,655評論 1 51
  • 第二周的課程是對第一周課程類設計的延伸。在第一周的課程中,講了不帶指針的一般類的設計,重點講了操作符的重載,及構造...
    屋頂上的橡皮人閱讀 624評論 0 50
  • 第二周筆記 1.三大函數(shù):拷貝構造,拷貝賦值,析構函數(shù)。 (1)當所寫的類中有指針時,要寫拷貝構造,拷貝賦值和析構...
    zhaohan閱讀 225評論 0 0

友情鏈接更多精彩內容