Effective C 學習筆記(三)

2021-08-15 20:43:49 字數 909 閱讀 9501

設計與宣告

1.讓介面容易被正確使用,不易被誤用

問題引入:

考慮乙個表現日期的建構函式:

class date ;

上述**看似很正確,但對於使用者來說容易犯錯誤,

三個引數順序不易區別,如:

date d1(30,3,1995); 

// 月和日引數顛倒,但程式並不會報錯

date d2(2,30,1995); 

// 2月並沒有30號

(1) 通過引入新型別,可一定程度上避免類似錯誤。

struct month

};

struct day

//防止發生隱式轉換

};struct year

};

class date

};

int main()

上述**可以正常編譯和執行,但如果使用者粗心地將主函式寫成:

date date2(6,2016,14);  //

直接輸入(int,int,int)引數

此時程式報錯:

但即使這樣還是有可能犯錯誤,如

輸入無意義的月份,所以應對輸入的引數做個檢測:

#include//新增標頭檔案

explicit month(int month): m_month(month)  //修改月份的建構函式

當使用者輸入無效引數時:

date date3(month(13), year(2016),  day(14));

能通過編譯,但無法執行,提醒使用者對引數的檢查

(2)給出輸入引數的列舉型別

比如:給出月份的列舉

struct month

enum ;

};int main()

這樣能提供使用者引數的選擇,減少錯誤

Effective C 學習筆記

學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...

Effective C 學習筆記

1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...

effective c 學習筆記

如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...