C++ Primer 讀書筆記——第12章 類

1. 構造函數一般應用一個構造函數初始化列表來初始化對象的數據成員。
2. 構造函數不能爲const。
3. 可以認爲夠在函數分兩個階段執行:(1)初始化階段;(2)普通計算階段,計算階段由構造函數函數體中所有語句組成。
4. 不管成員是否在構造函數初始化列表中顯示初始化,類類型的數據成員總是在初始化階段初始化,初始化發生在計算階段開始之前。
5. 使用構造函數初始化列表的版本初始化數據成員,沒有定義初始化列表的構造函數版本在構造函數函數體中對數據成員賦值。
6. 沒有默認構造函數的類類型的成員,以及const或引用類型的成員,不管是哪種類型,都必須在構造函數初始化列表中進行初始化。
7. 構造函數初始化列表中成員初始化的次序爲成員定義的次序。所以應按照聲明的次序來編寫構造函數初始化列表,儘可能避免使用一個成員來初始化其他成員。
8. 沒有聲明爲explicit的單形參構造函數可以隱式的將形參轉換爲該類類型的對象,當構造函數聲明爲explicit時則不能隱式轉換,該關鍵字只能用於類的構造函數聲明上,在類的定義體外部所做的定義不再重複它。
通常,除非有明顯的理由想要定義隱式轉換,否則,單形參構造函數應該爲explicit。
9. 常量成員函數(將const加在形參表後面)不能修改對象的數據成員值。const必須同時出現在聲明和定義中。
10. 如果是struct定義的類,則在第一個訪問標號之前的成員是公有的,而class定義的類,這些成員是私有的。
11. 可以在類定義體內指定一個成員爲inline,作爲其聲明的一部分,也可以在類定義體外部函數定義上指定inline。不在類定義體內定義的inline成員函數,其定義通常應放在有類定義的同一頭文件中。
12. 不完全類型(只聲明而不定義一個類)不能定義該類的對象。只能用於定義指向該類型的指針或者引用,或者聲明(而不是定義)使用該類型作爲形參類型或返回類型的函數。
13. 類可以有自身類型的指針或引用類型的數據成員,不能具有自身類型的數據成員,但可以有自身類型的static數據成員。
14. 普通的非const成員函數,this的類型是一個指向類類型的const指針,而const成員函數中this類型是一個指向const類類型對象的const指針。const成員函數只能返回*this作爲一個const引用。
15. 基於一個成員函數是否爲const可以重載一個成員函數;同樣的,基於一個指針形參是否指向const也可以重載一個函數。
16. mutable放在成員聲明之前表示該數據成員是可變的,其永遠不能爲const,甚至當它是const對象的成員也是如此,const對象和const成員函數都可以改變mutable成員的值。
17. 如果函數在類定義體之外定義,則用於返回類型的名字在類作用域外,如果返回類型使用由類定義的類型,則必須使用完全限定名。
18. 友元(friend)機制允許一個類將對其非公有成員的訪問授予指定的函數或類,friend關鍵字只能出現在類定義的內部。通常將友元聲明成組的放在類定義的開始或結尾。
19. 必須先定義包含成員函數的類,才能將成員函數設爲友元。
20. 友元聲明將已命名的類或成員函數引入到外圍作用域中。友元函數可以在類的內部定義,該函數的作用域擴展到包圍該類定義的作用域。
21. static成員函數能直接訪問類的static成員,不能直接訪問非static成員。
22. static成員不是任何對象的一部分,所以static成員函數不能聲明爲const,也不能聲明爲需函數。
23. static數據成員必須在類定義體外部定義(正好一次),不是通過類構造函數初始化,應該在定義的時候初始化。保證對象正好定義一次的最好辦法,就是將static數據成員的定義放在包含類的非內聯成員函數定義的文件中。
24. const static成員可以在類的定義體中進行初始化,初始化後數據成員仍必須在類的定義體之外進行定義,但這次不必指明其初始值。

發佈了30 篇原創文章 · 獲贊 66 · 訪問量 65萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章