C++ 建立類時常考慮的問題

C++ 建立類時常考慮的問題

本文僅以c++爲例,簡要說明建立一個類時咱們須要考慮的問題。建立一個新類實際上就是定義一 個新的數據類型,所以設計類須要當作類型設計來對待的,c++的設計者在設計語言的內置類型時是通過深思熟慮的,固然咱們新設計類時也須要這樣來對待,那麼咱們具體會思考什麼樣的問題呢?設計模式

繼承

  • 將這個類添加到現有繼承層次結構中是否合適?
  • 應該使用公有繼承仍是私有繼承?
  • 應該支持多繼承嗎?這樣會影響哪些成員函數設置爲虛函數。函數

    組合

  • 相對於直接使用繼承,將一個關聯的對象做用數據成員是否更合適?性能

抽象接口

  • 打算將該類設計爲抽象基類以使子類重寫各個虛成員函數嗎?

標準設計模式

  • 可否在類的設計中使用衆所周知的設計模式?
  • 使用設計模式可以從前人深思熟慮的、精妙的設計方法學中獲益,也使設計更容易被其餘工程師使用。

初始化與析構模型

  • 對象的建立於刪除是否讓客戶經過 newdelete 實現,仍是用工廠方法管理?
  • 是否要爲知己的類重載 newdelete 定製內存分配行爲?
  • 是否須要使用智能指針?

定義複製構造函數和賦值操做

  • 若是這個類中分配了動態內存,那麼這兩個都是須要定義的(固然,析構函數也須要定義)這會影響對象的複製和安值傳遞等行爲。

模板

  • 設計的類是定義了一族類型仍是一種類型?若是是一族類型的話,則能夠考慮使用模板是設計通常化。
  • const和explicit

  • 儘量將參數、返回值和方法定義爲 const
  • 對於單參數構造函數使用 explicit 關鍵字以免意外的類型轉換。

操做符

  • 定義類須要的操做符,如 +、*=、[]、==或<< 等。

類型轉換操做符

  • 考慮是否但願設計的類自動轉換爲其餘類型並聲明適當的轉換操做符。

友元

  • 友元會破壞類的封裝,友元的出現每每是設計變壞的徵兆。不到萬不得已不要使用。

非功能性約束

  • 如性能和內存使用狀況這類的問題也會約束類的設計
相關文章
相關標籤/搜索