閱讀168 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之32:弄清楚要編寫的是哪種類

摘要:

了解自我:有很多種不同的類。弄清楚要編寫的是哪一種。

    不同種類的類適用於不同用途,因此遵循著不同的規則。值類模仿的是內置類型。一個值類應該:

    1.有一個公用析構函數、複製構造函數和帶有值語義的賦值。

    2.沒有虛擬函數(包括析構函數)。

    3.是用作具體類,而不是基類。

    4.總是在棧中實例化,或者作為另一個類直接包含的成員實例化。

    基類是類層次結構的構成要素。一個基類應該:

    1.有一個公用而且虛擬,或者保護而且非虛擬的析構函數,和一個非公用複製構造函數和複製操作符。

    2.通過虛擬函數建立接口。

    3.總是動態地在堆中實例化為具體派生類對象,並通過一個智能指針來使用。

    不嚴格地來說,traits類是攜帶有關類型信息的模版。一個traits類應該:

    1.隻包含typedef和靜態函數,沒有可修改的狀態或者虛擬函數。

    2.通常不獨立實例化,隻作為基類或者成員。

    異常類提供了不尋常的值與引用語義的混合:它們通過值拋出,但應該通過引用捕獲。一個異常類應該:

    1.有一個公用析構函數和不會失敗的構造函數。

    2.有虛擬函數,經常實現克隆和訪問。

    3.從std::exception虛擬派生更好。

最後更新:2017-04-03 12:53:56

  上一篇:go js省市三級聯動
  下一篇:go C++ 仿函數/函數指針/閉包lambda