條款18讓介面容易被正確使用,不易被誤用;
①重定義介面的型別,比如:
data(int day, int month, int year);替換為:data(day d, month m, year y);這樣的好處在於較好的防止輸入順序出錯;可以對各型別加入束縛值,進一步預防呼叫出錯,比如month類別只允許1-12之間的整數型別;②保持介面的一致性,以及型別與內建型別的行為相容,比如:
stl中獲取各容器目前擁有元素數目採用size()函式成員,具有較好的一致性的介面,如果不同容器間有的容器採用size(),有的採用length屬性,將會導致介面一致性變差,使得使用者增加額外的記憶;③使用shared_ptr消除客戶的資源管理責任;
條款19設計class猶如設計type
該條款提醒類設計者在設計類時,需要關心的問題,建構函式,析構函式,運算子過載,繼承等條款20以pass-by-reference-to-const替換pass-by-value
通過pass-by-value的方式傳遞物件,會導致類的建構函式和析構函式的呼叫,導致程式的額外開銷增加, c++中內建型別以值傳遞外,其它自定義型別一般都採用常量引用傳遞,另外採用引用傳遞能解決派生類被分割的問題;條款21必須返回物件時,別妄圖返回其引用;
函式返回值:絕對不要返回區域性變數的指標或者引用;不要返回指向乙個堆分配物件(new classname);不要返回區域性靜態物件(local static)的指標或者引用,因為可能有多個物件同時同時操作該值;條款22將變數宣告為private在非要返回物件的時候,就讓函式返回乙個新的物件。
這麼做的好處有:提高類函式訪問的一致性(都以函式形式進行訪問處理);對類實現進行了封裝,當對private成員進行修改時,需要通過函式來實現,因此當需要對資料操作方式進行修改,或者增刪資料時,不影響類使用者編寫的**;封裝後的**更容易去新增前置條件和後條件的驗證處理;proteted不必pubilc更具封裝性;條款23使用非成員非友員函式替換成員函式
class webbrowser
有使用者想執行所有這些動作,現在有兩種方式:
void clearbrowser(webbrowser& wb)
第二種做法能增加封裝性,對於函式clearbrowser(),可以將其放在乙個包含類webbrowser的命名空間中,或者放在工具類中;這樣做的好處的使得更好的擴充套件類webbrowser的相關功能;條款24若所有引數型別需要轉換,就使用非成員函式
該條款是讓我們,在為類寫二元操作符的時候,為了保證操作符的性質,如乘法的交換性,考慮把對應的操作運算過載函式寫為類的非成員函式;
Effective C 閱讀筆記(1)
關鍵字 explicit 用於告知編譯器,該建構函式可以用於完成隱式型別轉換 implicit type conversation 建議 除非有乙個很好的理由,否則將建構函式申明為 explicit!c 是乙個由多個次語言組成的語言聯邦 c 風格 物件導向的c 泛型c stl c 不同的次語言尤其各...
《effective c 》閱讀筆記 1
之前閱讀一部分 effective c 作為一本被眾多讀者所推薦的書自然有它的獨特的魅力所在。在 過一部分該書的一部分內容之後,不由的覺得該書確實是集c 精華於一身,同時還加以科普了很多相對來說在一般老式課本難以見到的語法和語句,如智慧型指標等用法,並舉出例項將該其與其他語法相對而言的優點凸顯出來。...
Effective C 閱讀筆記
2019年九月四日 緒論 explicit的用法 用於建構函式,防止出現隱式型別轉換,例子 include using namespace std class object object void dosomething object b int main int argc,char const a...