C++ primer 第十二章

1. 將const加在形參表之後,就可以將成員函數聲明爲常量。const成員函數不能改變所操作對象的數據成員。const必須同時出現在聲明和定義中,跟static不同。

 

2. 在類內部定義的成員函數,將自動作爲inline處理。

 

3. 因爲只有當類定義體完成後才能定義類,因此類不能具有自身類型的數據成員。但是,只要類名出現就可以認爲該類已聲明,所以可以使用指向自身類型的指針或引用。

 

4. 如果成員函數需要返回對其自身類型對象的引用,可以使用this指針。

return *this;

 

5. 普通的非const成員函數中,this的類型是指向類類型的const指針,可以改變this所指向的值,但不能改變this所指向的地址。在const成員函數中,this的類型是指向const類類型對象的const指針,既不可以改變this所指向的值,也不可以改變this所指向的地址。

 

6. 可變數據成員mutable永遠都不能爲const,甚至當它是const對象的成員時也如此。因此,const成員函數可改變mutable成員。

 

7. 可以初始化const對象、引用類型對象和沒有默認構造函數的類類型,而不能進行賦值。所以應該用必須使用【構造函數初始化列表】初始化const對象、引用類型、無默認構造函數的類類型。

 

8. 在構造函數初始化列表中,成員被初始化的順序是按照它們被定義的順序。第一個被定義的成員首先初始化。

 

9. 一個類只要定義了一個構造函數,編譯器就不會在生成默認構造函數。每個構造函數都應該爲每個內置或複合類型的成員提供初始化式。沒有初始化內置或複合類型成員的構造函數,將使那些成員處於未定義的狀態。

 

10. 類通常應該有一個默認構造函數。如果沒有,那麼有這些缺點:

<1> 該類不能用作動態分配數組的元素類型

<2> 該類用作靜態分配數組的類型時。必須爲每個元素提供顯式的初始化式

<3> 對象保存該類類型對象的容器,比如vector,不能使用【只接受容器大小而沒有同時提供元素初始化式】的構造函數。

 

11. 隱式類類型轉換,例:

類Class A有一個【單實參】的構造函數A(string str);而有某個普通函數B(A a),需要傳遞一個A類型的實參,此時如果傳遞一個string類型,即B(str)。則會完成一次隱式類型轉換,利用該構造函數,將string類型轉換成Class A的一個對象。

 

如果想要防止隱式類型轉換,可以使用explicit關鍵字,在本例中是explicit A (string a);

explicit關鍵字只能用於類內部的構造函數聲明上,在類外進行定義時不再重複它。

通常,單形參構造函數應該是explicit,可以避免錯誤。

 

12. 對於沒有構造函數而且全體數據成員均爲public的類,可以採用與初始化數組元素相同的方式來初始化其成員。根據數據成員的聲明次序來使用初始化式。

 

13. 友元friend機制允許將類的非公有成員的訪問權授予指定的函數或者類。友元聲明以關鍵字friend開始,只能出現在類內部。

如果將一個類設爲友元,則友元類的所有成員函數都可以訪問授予友元關係類的非公有成員。

 

14. 友元函數可以在類的內部定義,該函數的作用域擴展到【包圍該類定義的作用域】。

 

15. static數據成員獨立於該類的任意對象而存在。static成員函數沒有this形參。

當我們在類的外部定義static成員時,無需重複使用static關鍵字,只需要在類內部聲明時使用。

 

16. static成員不是通過類構造函數初始化,而應該在定義時初始化。

如果初始化式是一個【常量表達式】,那麼const static數據成員可以在類定義體內部進行初始化。但是即使在類的定義體內部初始化,const static數據成員仍必須在類的定義體之外進行定義。

 

17. static數據成員的類型可以是該成員所屬的類類型,與非static成員不同。
發佈了84 篇原創文章 · 獲贊 9 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章