class
的設計就是type
的設計,在定義乙個新的type
之前,考慮以下問題:
你的新type需要什麼樣的轉換?
什麼樣的操作符核函式對此新的type是合理的? 這個問題將決定你的class宣告哪些函式
什麼樣的標準函式應該被駁回 這些正是你必須宣告為private的
誰改取用新type的成員? 這些幫助決定那些成員為public,哪些為protedted,哪些為private。也幫助決定哪乙個class和/或function應該是友元,以及將他們巢狀到另乙個之內是否合理。
什麼是type的「未宣告介面」? 他對效率、異常安全性以及資源運用提供何種保證?你講在這些方面提供的保證將為你的class實現**加上相應的約束條件
你的type有多麼一般化 或許你並非定義了乙個新type,而是定義了一整個types家族。如果果真如此,你就不應該定義乙個新的class,而是定義乙個新的class template(模板類)
你真的需要乙個新type嗎? 如果只是定義乙個新的子類以便為既有的class新增機能,說不定單純定義乙個或多個non-number函式或者templates更能夠達到目標。
條款19 設計class猶如設計type
當你定義了乙個新的class時,也就定義了乙個新的type。身為c 程式設計師,你有許多時間主要用來擴張你的型別系統。這意味著你並不只是class設計者,還是type設計者。過載函式和操作符,控制記憶體的分配和歸還,定義物件的初始化和終結 全都在你的手上。因此你應該帶著和 語言設計者當初設計語言內建...
條款18 25 設計與宣告
條款18 讓介面容易被正確使用,不容易被誤用 保持函式名的一致性 也就是說具有相同功能的函式最好命名是一致的,這樣設計的理由就是讓別人 包括自己 用起來不會因為命名混亂而錯誤使用 函式名語義清晰 最好能讓人一眼看出這個函式的功能 2.輸入引數 語義清晰 我們可以使用精確的命名,讓呼叫者可以直接明白引...
條款31提及pimpl設計模式
條款31 將檔案間的編譯依存關係降至最低 中提到,由於標頭檔案和其含入標頭檔案之間形成一種編譯依存關係,如果這些標頭檔案所依賴的其他標頭檔案有任何改變,那麼每乙個含入該標頭檔案的的檔案就要重新編譯。為了減少這種依賴關係,文中提到一種 將物件實現細目隱藏於乙個指標背後 的遊戲。針對person我們可以...