第七章 類

  1. 類的用戶和類的設計者常常是同一個人。儘管如此,還是最好把角色區分開來。當我們設計類的接口時,應該考慮如何才能使得類易於使用;而當我們使用類時,不應該顧及類的實現機理。
  2. 作爲一個設計良好的類,既要有直觀且易於使用的接口,也必須具備高效的實現過程。
  3. 一般來說,如果非成員函數是類接口的組成部分,則這些函數的聲明應該與類在同一個頭文件內。
  4. 因爲IO類屬於不能被拷貝的類型,因此我們只能通過引用來傳遞它們。而且,因爲讀取和寫入的操作會改變流的內容,所以函數接受的都是普通引用,而非對常量的引用。
  5. struct 和 class 的唯一一點區別是,他們的默認訪問權限不一樣。struct 默認是 public 的,而 class 默認是 private 的。
  6. 最好在類定義開始或結束前的位置集中聲明友元。
  7. 一個 const 成員函數如果以引用的形式返回 * this ,那麼它的返回類型將是常量引用。
  8. 我們必須首先完成類的定義,然後編譯器才能知道存儲該數據成員需要多少空間。因爲只有當類全部完成之後纔算被定義,所以一個類的成員類型不能是自己。然而,一旦一個類的名字出現後,它就被認爲是聲明過了(但未定義),因此類允許包含指向它自身類型的引用或指針。
  9. 編譯器處理完類中的全部聲明後纔會處理成員函數的定義。
  10. 有時我們可以忽略數據成員初始化和賦值之間的差異,但並非總能這樣。如果成員是 const 或者是引用的話,必須將其初始化。類似的,當成員屬於某種類類型且該類沒有定義默認構造函數時,也必須將這個成員初始化。
  11. 在很多類中,初始化和賦值的區別事關底層效率問題:前者直接初始化數據成員,後者則先初始化再賦值。除了效率問題外更重要的是,一些數據成員必須被初始化。
  12. 成員的初始化順序與它們在類定義中的出現順序一致。最好令構造函數初始值的順序與成員聲明的順序保持一致。而且如果可能的話,儘量避免使用某些成員初始化其他成員。
  13. 如果一個構造函數爲所有參數都提供了默認實參,則它實際上也定義了默認構造函數。
  14. 靜態成員函數不能聲明成 const 的,而且我們也不能再 static 函數體內使用 this 指針。當在類的外部定義靜態成員時,不能重複 static 關鍵字,該關鍵字只出現在類內部的聲明語句。
  15. 一般來說,我們不能在類的內部初始化靜態成員。相反的,必須在類的外部定義和初始化每個靜態成員。
  16. 即使一個常量靜態數據成員在類內部被初始化了,通常情況下也應該在類的外部定義一下該成員。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章