(七)類

類的有點是講相關聯的數據放到了一起,並且提供了相應的操作方法,可以方便使用和管理.

但凡有數據流入類,那麼就要對數據進行合法有效性檢查,不符合則拋出異常,在類內部,因爲已經確認數據的有效性,應該檢查函數參數的有效性,使用assert,類中和IO相關的操作函數應該特別起名?

應該使用常量成員函數,來提高可用性.

無論何時只要類的對象被創建,就會執行構造函數

析構函數不被執行的情況,線程非自然退出導致棧未被清理,相應的析構函數不會被執行.

應該使用類內初始值來提供成員的默認初始值,應該使用統一初始化列表來初始化所有的對象.

當某個數據成員被構造函數初始值列表忽略時,他將以與合成默認構造函數相同的方式隱式初始化,意味着成員會使用類內初始化.沒有出現在構造函數初始值列表中的成員將通過相應的類內初始值初始化.

=default 來要求編譯器生成默認構造函數.

封裝是爲了安全的操作數據,作爲一個關卡設防,統一一次性檢查無效的數據輸入,確保類內代碼邏輯正常.防止無意破壞內部邏輯,防止破壞對象狀態,減少測試代碼,並且實現細節可以隨時改變,而接口不會變.

friend友元的作用是取消訪問控制的限制,private protect等,友元聲明不同於具體的函數聲明,類型聲明,具體使用到相應的類或函數,需要對他們進行聲明.一般在特殊情況下使用友元,否則使用成員函數.如果要把一組重載函數聲明爲它的友元,則需要對這組函數每一個分別聲明

在類中定義類型,應該定義在類的開頭,防止類型沒有被識別.

聲明和定義的地方同事說明inline 是不合法的,最好在類的外部定義inline

const成員或對象通常不會被修改,爲了特殊情況打破這個,可以使用可變數據成員mutable,可變數據成員永遠不會是const,可以對其進行讀寫操作.

有時候可以寫函數的const和非const的重載,目的是爲了方便非const的連續調用修改,因爲防止從非const得到返回const的引用而無法繼續調用非const函數.而這樣的方法本身其實是const的,

一個基本的願望是避免在多出使用相同的代碼

不完全類型聲明;class someclass;可以定義這種類型的指針或引用.也可以聲明爲參數或函數的返回類型

類構造函數中,成員初始化順序與他們在類中定義的順序一致,而並非與初始化列表一致,最要不要用成員初始化成員,容易出錯!!

轉換構造函數,在{}中,如果存在用給定參數作爲構造函數的參數,那麼可以隱式轉換成對應對象.如果要抑制隱式轉換行爲使用explicit(好用),此時可以通過顯示轉換,class{"date"};

如果要將類轉換爲一種類型可以使用類型轉換運算符 operator type() const;

class SomeClass
{
 private: int val;
 public:
  operator int() const{return val;}
 }


聚合類.(測試沒有發現什麼特別的地方?)

類內靜態成員的類型可以是不完整類型,即可以是類本身.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章