一. 你需要乙個建構函式嗎?
建構函式 是一種特殊的方法 主要用來在建立物件時初始化物件 即為物件
成員變數
賦初始值,總與new運算子一起使用在建立物件的語句中 特別的乙個類可以有多個建構函式 可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。建構函式的特點:
1.建構函式的命名必須和類名完全相同。
2.建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾。
3.建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫。
有些內太簡單,它們的結構就是它們的介面,所以不需要建構函式。但是一般情況下都需要建構函式來初始化成員變數。
二. 你的資料成員是私有的嗎?
一般都需要將類的資料成員設定為私有,否則設計者將無法控制何時訪問這些成員。
三. 你的類需要乙個沒有引數的建構函式嗎?
如果乙個類已經有了建構函式,而你想宣告該類的物件可以不必顯示的初始化它們,則必須顯示地寫乙個午餐的建構函式,例如:
class point
...private:
int x, y;
}此時,如果使用下面的語句則為非法:
point p; //因為這裡沒有指出怎麼樣初始化物件p
如果需要生成某個類物件的陣列的時候,也需要乙個無參的建構函式。
四. 是不是每個建構函式初始化所有的資料成員?
五. 類需要析構函式嗎?
如果類分配了資源,而這些資源又不會由成員函式自動釋放,則需要析構函式
六. 類需要乙個虛析構函式嗎?
絕不會用作基類的類是不需要虛析構函式的。如果乙個類需要被繼承一般都需要有乙個虛析構函式。虛析構函式通常是空的。
七. 你的類需要複製建構函式嗎?
關鍵要看複製該類的物件是否就相當於複製器資料成員和基類物件。如果不是則需要複製建構函式。
如果你的類在建構函式中分配了資源,則需要乙個顯示的複製建構函式來管理資源。
如:(此時就需要複製建構函式)
class string
一般情況下,當類中包含有指標型別的 資料成員,則需要三大函式(複製建構函式,複製操作符,析構函式)。
八. 你的類需要乙個賦值操作符嗎?
如果需要乙個複製建構函式,就一般也需要乙個賦值操作符。
九. 你的賦值操作符能正確地將物件賦值給物件本身嗎?
比如有這樣乙個類:
class string;
下面是乙個不正確例子:(一旦向自身賦值則會失敗)
string & string::operator=(const string &s)
一下是正確的實現方式:
string & string :: operator=(const string &s)
return *this;
}十. 你的類需要定義關係操作符嗎?
十一. 刪除陣列時你記得用delete 嗎?
十二. 記得在複製建構函式和複製操作符的引數型別中加上const嗎?
十三. 如果函式有引用引數,他們應該是const引用嗎?
《C 沉思錄》筆記 類設計者核查表
類設計者的核查表 1.類需要建構函式麼?2.資料是否需要保持私有的?方案一public int length 方案二public const int length 在建構函式中length true length 這樣由於是const變數,只能讀,不能修改。private int true leng...
類設計者的核查表 c 沉思錄筆記
類的設計時需要弄清楚一些問題,這些問題沒有確切的答案,關鍵是要思考他們,並確認你所作的事情是處於有意識的決定。主要從類的建構函式 析構函式 複製建構函式和賦值操作符 資料成員及const修飾成員函式等五個方面來考慮。1 類的建構函式 類的建構函式主要從是否需要建構函式 是否需要無參的建構函式 是不是...
《C 沉思錄》 第四章 類設計者的核查表
設計乙個類的時候,需要考慮的問題 1 你的類需要乙個建構函式嗎?可能需要乙個建構函式來隱藏內部工作方式。2 你的資料成員是私有的嗎?保證資料的實時性,有效性。比如長度,如果是共有的,被修改了,就不能正確的表達原先所謂的 長度 3 你的類需要乙個無參建構函式嗎?沒有的話,等於禁止了物件陣列。class...