1. 不要用c + +主動重寫我們已有的c**,除非我們需要對它的功能做較大的調整,(也就
是說,不破不立)。
2. 要區別類的建立者和類的使用者(客戶程式設計師)。
3. 當我們建立乙個類時,要盡可能用有意義的名字來命名類。
4. 資料隱藏允許我們(類的建立者)將來在不破壞使用者**(**使用了該類)的情況下
隨心所欲地修改**。為實現這一點,應把物件的成員盡可能定義為private, 而只讓介面部分
為p u b l i c,而且總是使用函式而不是資料。
5. 不要陷入分析癱瘓之中。有些東西只有在程式設計時才能學到並使各種系統正常。
6. 我們的分析和設計至少要在系統中建立類、它們的公共介面、它們與其他類的關係、特
殊的基類。
7. 記住軟體工程的基本原則:所有的問題都可以通過引進乙個額外的間接層來簡化
(andrew koenig向我解釋了這一點)。這是抽象方法的基礎,而抽象是物件導向程式設計的首要
特徵。8. 使類盡可能地原子化。也就是每個類有乙個單
一、清楚的目的。
9. 從設計的角度,尋找並區分那些變化和不變的成分。
10. 注意不同點。兩個語義上不同的物件可能有同樣的操作或反應,自然就會試著把乙個
作為另乙個的子類以便利用繼承性的好處。這就叫差異,但並沒有充分的理由來強制這種並不
存在的父子關係。乙個好的解決辦法是產生乙個共同的父類:它包含兩個子類
11. 注意在繼承過程中的限制。最清晰的設計是向被繼承者加入新的功能,而如果在繼承
過程刪除了原有功能,而不是加入新功能,那這個設計就值得懷疑了。
12. 不要用子類去擴充套件基類的功能。如果乙個類介面部分很關鍵的話,應當把它放在基類
中,而不是在繼承時加入。如果我們正在用繼承來新增成員函式,我們可能應該重新考慮我們
的設計。
13. 乙個類一開始時介面部分應盡可能小而精。在類使用過程中,我們會發現需要擴充套件類
的介面。然而乙個類一旦投入使用,我們要想減少介面部分,就會影響那些使用了該類的**
14. 大聲朗讀我們的類,確保它們是合理的。讀基類時用「is-a」,讀成員物件時用「has-a」。
15. 在決定是用繼承還是用組合時,問問自己是不是需要向上對映到基類。如果不需要,
就用組合(成員物件)而不用繼承。
16. 有時我們為了訪問基類中的p r o t e c t e d成員而採用繼承。這可能導致乙個可察覺的對多
重繼承的需求。如果我們不需要向上對映,首先匯出乙個新類來完成保護成員的訪問,然後把
這個新類作為乙個成員物件,放在需要用到它的所有物件中去。
17. 乙個典型的基類僅僅是它的派生類的乙個介面。當我們建立乙個基類時,預設情況下
讓成員函式都成為純虛函式。析構函式也可以是純虛函式(強制派生類對它重新定義),但記
住要給析構函式乙個函式體,因為繼承關係中所有的析構函式總是被呼叫。
18. 當我們在類中放乙個虛函式時,讓這個類的所有函式都成為虛函式,並在類中定義一
個虛析構函式。
19. 用資料成員表示值的變化,用虛函式表示行為的變化。
C 程式設計準則學習記錄
1 視c 為乙個語言聯邦,包含c語言 object oriented c 泛型程式設計 stl四種次語言。程式設計準則的需要根據我們具體使用哪種次語言而定。2 盡量讓 define多休假。也就是可以利用const或enum來代替 define定義的常量。用模板inline函式代替類似函式的 defi...
C 程式語言的基本準則
二 第二高準則 高效性 1.陣列下標0索引 2 邏輯短路 3 微調控制能力 4 編譯自主性 1.內建函式命名 2.二維陣列下標表示總行數和總列數 3.運算的優先順序 二義性是指乙個c 語句所表達的含義含有兩種或多種含義。這對於計算機執行計算而言時需要消除的。具體無二義性體現在一下幾點 優先順序 運算...
C 命名準則
總則 命名用英語,單詞簡單,明了。意義明確。過長的單詞可以使用省略。一般是去掉母音字母形成省略。如果有通用的縮寫,應該採用通用的縮寫。1 函式命名 1.1 全域性函式 採用限定詞 動詞 名詞的原則 如 void rmodelsetwidth 1.2 類的成員函式 採用動詞 名詞 的原則。如void ...