核查表並不是任務清單。它的用途是幫助你回憶起可能會忘掉的事情,而不是來約束你。如果只是盲目地按照核查表的要求按部就班地做,到頭來可能還是會忘記一些事情。知道了這一點之後,請看下面關於定義類時要弄清楚的一些問題。這些問題都沒有確切的答案,關鍵是要提醒你思考它們,並確認你所作的事情是出自於有意識的決定,而非偶然事件。
* 你的類需要乙個建構函式嗎?
是否需要,要看具體情況,結構比較簡單的類,不需要建構函式。當我們需要使用那些足夠複雜的類時,需要建構函式來隱藏它們的內部工作方式。
* 你的資料成員是私有的嗎?
通常使用公有的資料成員不是什麼好事情,因為類的設計者無法控制何時訪問這些成員。
* 你的類需要乙個無參的建構函式嗎?
如果乙個類已經有了乙個建構函式,而你想宣告該類的物件可以不必顯式地初始化它們,則必須顯式地寫乙個無參的建構函式。
* 是不是每個建構函式初始化所有的資料成員?
建構函式的用途就是以一種明確的狀態來設定物件,而物件的狀態由物件的資料成員反映。並非所有的資料成員都需要立即初始化,有時,類會有一些資料成員,它們只在它們的物件存在了一定時間之後才有意義。
* 類需要析構函式嗎?
需要深入考慮乙個類要做些什麼,那麼該類是否需要析構函式的問題就十分明顯了。應該問一問該類是否分配了資源,而這些資源有不會由成員函式自動釋放,這就足夠了。
* 類需要乙個虛析構函式嗎?
有些類需要虛析構函式只是為了宣告它們的析構函式是虛的。決不會用作基類的類是不需要虛析構函式的:任何虛函式只有在繼承的情況下才有用。
* 你的類需要複製建構函式嗎?
複製該類的物件是否就相當於複製其資料成員和基類物件,這是問題的關鍵,如果並不相當,就需要複製建構函式。如果類在建構函式內分配資源,則可能需要顯式的複製建構函式來管理資源。有析構函式(除了空的虛析構函式外)的類通常是用析構函式來釋放建構函式分配的資源,這通常也說明需要乙個複製建構函式。
* 你的類需要乙個賦值操作符嗎?
如果需要複製建構函式,同理多半也會需要乙個賦值操作符。如果不想使用者能夠設定類中的物件,就將賦值操作符私有化。
* 你的賦值操作符能正確地將物件賦給物件本身嗎?
自我賦值時,要保證不會把自己釋放,通常使用if(this != &r)來判斷。
* 你的類需要定義關係操作符嗎?
由於c++支援模板,所以通用庫也逐漸開始包含容器類了。這些類提供了關於諸如列表,集合和圖等資料結構的泛型定義。這些容器依賴於它們所包含的元素型別的操作。通常要求容器能夠判斷兩個值是否相等。還常常需要容器具有判斷乙個值是否大於或者小於另乙個值的能力。
因此,如果你的類邏輯上支援相等操作,那麼提供operator==和operator!=就可能會很有好處。類似地,如果你的類的值有某種排序關係,那麼就可能會提供餘下的操作符。只要有人想建立你的型別的有序集合,你就必須提供關係操作符。
* 刪除陣列時你記住了用delete了嗎?
由於歷史的原因以及編譯器優化,這裡提供delete語法,具有很高的效率,而使用這種格式,仍然是一種很好的習慣。
* 記得在複製建構函式和賦值操作符的引數型別中加上const了嗎?
複製物件不會改變源物件,使用const進行限定,是十分好的風格,而賦值也一樣。
* 如果函式有引用引數,它們應該是const引用嗎?
只有當函式想改變引數時,它才應該有不用const宣告的引用引數。
* 記得適當地宣告成員函式為const的了嗎?
如果確信乙個成員函式不用修改它的物件,就可以宣告它為const,這樣就把它用於const物件了。
類設計者的核查表
1,你的類需要乙個建構函式嗎?2,你的資料成員是私有的嗎?3,你的類需要乙個無參建構函式嗎?4,是不是每個建構函式初始化所有的資料成員嗎?5,類需要析構函式嗎?6,類需要乙個虛析構函式嗎?7,你的類需要複製建構函式嗎?8,你的類需要乙個賦值操作符嗎?9,你的類需要定義關係操作符嗎?10,你的類需要定...
類設計者的核查表
核查表不是任務清單。它的用途是幫你回憶起可能會忘掉的事情,而不是約束你。下面的問題沒有確切的答案,關鍵是要提醒你思考他們,並確認你所做的事情是出於有意識的決定,而不是偶然行為。你的類需要乙個建構函式碼?基本上是 你的類成員是私有的嗎?你的類需要乙個無參的建構函式碼?是不是每個建構函式初始化所有資料成...
類設計者的核查表
設計乙個類的時候需要考慮的問題 1 你的類是否需要乙個建構函式 2 你的資料成員是否私有化 使用函式返回私有資料成員的值,並且函式要使用const,說明私有資料成員不能被修改。3 你的類是否需要乙個無參的建構函式 能否定義成陣列的形式 4 是不是每個建構函式初始化所有的資料成員 初始化時建構函式的主...