設計與宣告

2022-09-03 05:45:12 字數 1168 閱讀 3313

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

條款19:設計class猶如設計type

條款20:寧以pass-by-value-to-const替換pass-by-value

預設情況下c++以by value方法給物件傳遞引數,函式引數都是物件的副本,這些副本是由物件的copy建構函式產出,這可能使得函式呼叫操作更加費時(一次copy建構函式的呼叫,函式結束時一次析構函式的呼叫)。

可以將函式宣告為下面的形式,這樣將不會有任何額外的建構函式和析構函式的呼叫:

void func (const student& student)

引數宣告中的const是重要的,可以讓呼叫者知道函式內不會對student做出任何修改。

這種方法還可以避免引數作為其父類傳入函式後,函式內僅僅留下父類物件的情況。

這個規則並不適用於內建型別、stl的迭代器以及函式物件。

條款21:必須返回物件時,別妄想返回其reference

任何函式返回乙個reference指向某個local物件結果都將是錯誤的,因為local物件在函式結束後就會被銷毀。

條款22:將成員變數宣告為private

條款23:寧以non-member、non-friend替換member函式

non-member、non-friend函式能提供比member函式更高的封裝性。

封裝的好處在於我們能改變事物而只影響有限的客戶。可以粗略的說,越多函式可以訪問到乙個類,這個類的封裝性越差。

通常的做法是讓non-member函式跟相對應的類放到同一命名空間下:

namespace

webbrowserstuff ;

void

clearbrowser() ;

...}

條款24:若所有引數皆需型別轉換,請為此採用non-member函式

條款25:考慮寫出乙個不拋異常的swap函式

設計與宣告

預設情況下c 是以值傳遞的形式傳遞物件到函式的。除非特別指定,否則函式引數都是以實際實參的副本為初值。呼叫端所獲的也是函式返回值的乙個副本。這些副本是由物件的拷貝建構函式產生,這會使值傳遞非常費時。特別是在乙個結構複雜的類中,例如 class student public person當有以下函式 ...

設計與宣告(一)

條款18 讓介面容易被正確使用,不易被誤用 開發乙個 容易被正確使用,不易被誤用 的介面,首先必須考慮使用者會做出什麼樣的錯誤。以下為例 class date 乍見之下這個介面通情達理,但是至少容易犯兩個錯誤。第一,他們可能以錯誤的次序傳遞引數 第二,他們可能傳遞乙個無效的引數。許多客戶端錯誤可以因...

二 設計與宣告

類的設計是一件非常複雜的事情,設計師在設計類的時候不僅僅要考慮實現的功能,又要兼顧擴充套件性 易用性等一些功能外的特性。在使用外部庫的時候,在不查閱文件的基礎上,我們常常煩惱於如何呼叫api,一些引數非常容易混淆。舉乙個例子我們在學生系統中要對一名學生進行輸入生日的操作。item19常常我們使用a ...