《Effective C艹》讀書筆記(12)

2021-09-02 12:28:36 字數 825 閱讀 5501

條款十八:讓介面容易被正確使用,不易被誤用

如果我們設計乙個日期類,可能會寫成如下的模樣

class date;
這個建構函式貌似沒有問題,但是她卻無法阻止使用者輸入錯誤的資料。比如使用者可能會把date(3,30,2015)寫成date(30,3,2015)。

所以說其實當你設計的程式需要假定使用者都能按你想像來進行操作的話,這個程式就存在隱患。

一種好的改善方式是讓使用者知道,傳參的時候傳遞的是哪些內容。我們可以用新的類來代替int

class month

};class day

};class year

};class date

};int main()

這樣做,一來使用者可以明確輸入的資料內容,二來,可以在類內新增約束比如

explicit month(int month): m_month(month)
這樣輸入非法資料就會報錯。

另一種避免使用者誤用的方式是讓編譯器對不正確的使用方式加以阻止,比如

const object operator* (const object& a, const object& b);
就可以避免使用者寫出a = b*c這樣的錯誤**

還有一點就是要「盡量令你的自定義型別的行為與內建型別行為一致」。打個比方,不要重寫了操作符*,卻在內部定義+的功能。

最後一點,在管理資源的時候,最好使用專門的資源管理類,比如簡單工廠函式的返回值,要設為shared_ptr或者auto_ptr。

《Effective C艹》讀書筆記(1)

條款01 把c 當作乙個語言聯邦 c 不是簡單的 新增了物件導向特性的c語言 我們可以認為c 是由以下四個次語言組成的語言。2,物件導向c 這一部分包含了 封裝,繼承,多型,等等物件導向程式設計語言最直觀的特徵。3,template c 泛型程式設計。4,stl 是乙個template程式庫。包含有...

《Effective C艹》讀書筆記(14)

條款21 當必須返回物件時,別妄想返回其reference 並不是在任何情況下都可以通過傳引用的方式返回值。看下面這段 const rational operator const rational r1,const rational r2 事實上,任何對這個函式返回值的讀寫操作都將返回錯誤,因為返回...

《Effective C艹》讀書筆記(15)

條款22 將成員變數宣告為private 作為學生黨,經常在 裡把變數宣告為public,在外部直接進行訪問了事。這個條款告訴我們,這樣做是非常不科學的。1,private能夠提供非常完善的許可權控制,你可以直接控制乙個變數是唯讀,還是可讀可寫,甚至是只寫。而不是把使用這個類的各種許可權全部公開。2...