C++箴言:視類設(shè)計為分類設(shè)計
發(fā)表時間:2024-02-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在 C++ 中,就像其它面向?qū)ο缶幊陶Z言,可以通過定義一個新的類來定義一個新的類型。作為一個 C++ 開發(fā)者,你的大量時間就這樣花費在增大你的類型系統(tǒng)。這意味著你不僅僅是一個類的設(shè)計者,而且是一個類型的設(shè)計者。重載函數(shù)和運算符,控制內(nèi)存分配和回收,定義對象的初始化和終結(jié)過程——這些全在你的掌控之中...
在 C++ 中,就像其它面向?qū)ο缶幊陶Z言,可以通過定義一個新的類來定義一個新的類型。作為一個 C++ 開發(fā)者,你的大量時間就這樣花費在增大你的類型系統(tǒng)。這意味著你不僅僅是一個類的設(shè)計者,而且是一個類型的設(shè)計者。重載函數(shù)和運算符,控制內(nèi)存分配和回收,定義對象的初始化和終結(jié)過程——這些全在你的掌控之中。因此你應(yīng)該在類設(shè)計中傾注大量心血,接近語言設(shè)計者在語言內(nèi)建類型的設(shè)計中所傾注的大量心血。
設(shè)計良好的類是有挑戰(zhàn)性的,因為設(shè)計良好的類型是有挑戰(zhàn)性的。良好的類型擁有簡單自然的語法,符合直覺的語義,以及一個或更多高效的實現(xiàn)。在 C++ 中,一個缺乏計劃的類設(shè)計,使其不可能達到上述任何一個目標(biāo)。甚至一個類的成員函數(shù)的執(zhí)行特性可能受到它們是被如何聲明的影響。
那么,如何才能設(shè)計高效的類呢?首先,你必須理解你所面對的問題。實際上每一個類都需要你面對下面這些問題,其答案通常就導(dǎo)向你的設(shè)計的限制因素:
你的新類型的對象應(yīng)該如何創(chuàng)建和銷毀?如何做這些將影響到你的類的構(gòu)造函數(shù)和析構(gòu)函數(shù),以及內(nèi)存分配和回收的函數(shù)(operator new,operator new[],operator delete,和 operator delete[])的設(shè)計,除非你不寫它們。
對象的初始化和對象的賦值應(yīng)該有什么不同?這個問題的答案決定了你的構(gòu)造函數(shù)和你的賦值運算符的行為和它們之間的不同。這對于不混淆初始化和賦值是很重要的,因為它們相當(dāng)于不同的函數(shù)調(diào)用。
以值傳遞(passed by value)對于你的新類型的對象意味著什么?記住,拷貝構(gòu)造函數(shù)定義了一個新類型的傳值(pass-by-value)如何實現(xiàn)。
你的新類型的合法值的限定條件是什么?通常,對于一個類的數(shù)據(jù)成員來說,僅有某些值的組合是合法的。那些組合決定了你的類必須維持的不變量。這些不變量決定了你必須在成員函數(shù)內(nèi)部進行錯誤檢查,特別是你的構(gòu)造函數(shù),賦值運算符,以及 "setter" 函數(shù)。它可能也會影響你的函數(shù)拋出的異常,以及你的函數(shù)的異常規(guī)范(exception specification)(你用到它的可能性很。。