看這本書主要是想規範下自己的編程習慣,所以看完只是開始,以後在實踐中多運用。美好的期待。
簡介:導讀中說1-6章,難度低,重細節。7-11章是專題論述,多思考。那就先看前6章。再做附錄的測試題。7-11一天看一章,不知道會不會太誇張。
看書規劃調整版本1:今天看1-2章,明天3-4,後天5-6。
看書規劃調整版本2:前六章複習到周一。
看書規劃調整版本3:2月22號看完,25號要出差。
第一章
檔案結構
每個C++/C程式通常分為兩個檔案。一個檔案用於儲存程式的聲明,稱為標頭檔。另一個檔案用於儲存程式的實現,稱為定義檔案。
1、1著作權和版本的聲明
位於標頭檔和定義檔案的開頭,主要內容有:
1)
著作權資訊。
2)
檔案名稱,標識符,摘要。
3)
目前的版本號,作者/修改者,完成日期。
4)
版本曆史資訊。
例子1-1:
/*
*Copyright (c) 2001,上海貝爾有限公司網路應用事業部
*All rights reserved.
*
*檔案名稱:filename.h
*檔案標識:見組態管理計劃書
*摘 要:簡要描述本檔案的內容
*
*目前的版本:1.1
*作 者:輸入作者(或修改者)名字
*完成日期:2001年7月20日
*
*取代版本:1.0
*原作者 :輸入原作者(或修改者)名字
*完成日期:2001年5月10日
*/
1、2標頭檔的結構
標頭檔由三部分內容組成:
1)標頭檔開頭處的著作權和版本聲明。
2)預先處理塊。
3)函數和類結構聲明等。
遵循以下規則和建議:
【規則1-2-1】為防止標頭檔被重複引用,應當用ifndef/define/endif結構產生預先處理塊。
【規則1-2-2】用#include <>來引用標準庫標頭檔,#include “”來引用非標準庫標頭檔。
【建議1-2-1】標頭檔中只存放聲明而不存放定義。
【建議1-2-2】不提倡使用全域變數,盡量不要在標頭檔中出現像extern int value這類聲明。
假設標頭檔名稱為graphics.h,標頭檔結構樣本1-2:
//版本和著作權聲明參見樣本1-1,此處省略
#ifndef GRAPHICS_H //防止graphics.h被重複引用
#define GRAPHICS_H
#include <maht.h> //引用標準庫的標頭檔
#include “myheader.h” //引用非標準庫的標頭檔
void Function1(); //全域函式宣告
class Box //類結構聲明
{
}
#endif
1、3定義檔案的結構
定義檔案有三部分內容:
1)
定義檔案開頭處的著作權和版本聲明(參見樣本1-1)。
2)
對一些標頭檔的引用。
3)
程式的實現體。
假設定義檔案的名稱為graphics.cpp,定義檔案的結構參見樣本1-3:
//版本和著作權聲明參見樣本1-1,此處省略
#include “graphics.cpp” //引用標頭檔
//全域函數的實現體
void Function1(…)
{
……
}
//類成員函數的實現體
void Box::Draw(…)
{
……
}
1、4標頭檔的作用
1)通過標頭檔來調用庫功能。很多場合,原始碼不便公布,僅提供標頭檔和二進位的庫即可。使用者只需按照標頭檔中的介面聲明來調用庫功能。
2)標頭檔能加強型別安全檢查。若某個介面被實現或被使用時,其方式與標頭檔中的聲明不一致,編譯器就會指出錯誤。
1、5目錄結構
若標頭檔數目較多(如超過十個),通常應將標頭檔和定義檔案分別儲存於不同的目錄,以便於維護。如可將標頭檔儲存於include目錄,定義檔案儲存於source目錄(可是多級目錄)。
若某些標頭檔是私人的,它不被使用者程式直接引用,則沒必要公開其“聲明”。為加強資訊隱藏,這些私人標頭檔可和定義檔案存放於同一目錄。
總結:本章講檔案結構,先去理解檔案結構是什麼。從第一段瞭解到檔案結構由標頭檔和定義檔案組成。那接下來肯定是講解標頭檔和定義檔案了。標頭檔和定義檔案的共性,作者先單獨拿出來講。後分開各自講解。標頭檔作用單獨講,主要是當時很多語言沒有標頭檔的概念。最後講了目錄結構,這個該是從實踐中得知的吧。
第二章 程式的版式
版式會影響可讀性。程式的版式追求清晰、美觀。
2、1空行
空行起著分隔程式段落的作用。
【規則2-1-1】在每個類聲明後、每個函數定義結束後都要加空行。
【規則2-1-2】在一個函數體內,邏輯上密切相關的語句之間不加空行,其他地方加。
2、2程式碼
【規則2-2-1】一行代碼只做一件事,如只定義一個變數,或唯寫一條語句。
【規則2-2-2】if、for、while、do等語句各自佔一行,執行語句不得緊隨其後。不論執行語句有多少都要加{}。
【建議2-2-1】儘可能在定義變數的同時初始化該變數(就近原則)。
2、3程式碼內的空格
【規則2-3-1】關鍵字後留空格。如if、for、while等後留個空格再跟’(’。
【規則2-3-2】函數名後不要留空格,緊跟左括弧’(’,以與關鍵字區別。
【規則2-3-3】’(’向後緊跟,’)’、’,’、’;’向前緊跟,緊跟出不留空格。
【規則2-3-4】’,’之後留空格,如Function(x, y, z)。若’;’不是一行的結束符號,其後留空格,如for(initializition;
condition; update)。
【規則2-3-5】賦值操作符、比較操作符、算術操作符、裸機操作符、位操作符等二元操作符的前後應當加空格。
【規則2-3-6】一元操作符如”!”、”~”、””、”++”、”&”等前後不加空格。
【規則2-3-7】像”[]”、”.”、”->”這類操作符前不加空格。
【建議2-3-1】對於運算式比較長的for語句和if語句,為了緊湊起見可是當去掉些空格。如for(int i=0;
i<10; i++)和if((a<=b) && (c<=d))。
2、4對齊
【規則2-4-1】程式的分界符’{’和’}’應獨佔一行且位於同一列,同時與引用它們的語句靠左對齊。
【規則2-4-1】{}之內的代碼塊在’{’右邊數格處靠左對齊。
2、5長行拆分
【規則2-5-1】程式碼最大產度宜控制在70-80個字元以內。
【規則2-5-2】長運算式要求在低優先順序操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮排,使排版整齊,語句可讀。
2、6修飾符的位置
【規則2-6-1】應當將修飾符*和&緊靠變數名。如int *x, y; //x與y不願分行定義時,y不會被誤解為指標。
2、7注釋
【規則2-7-1】注釋是對代碼的“提示”,而不是文檔,不可過多,應準確、易懂。
【規則2-7-2】邊寫代碼邊注釋,修改代碼同時修改相應的注釋。
【規則2-7-3】注釋的位置應與被描述的代碼相鄰,可放在代碼的上方或右方,不可放在下方。
【規則2-7-4】當代碼較長,特別是有多重嵌套時,應在一些段落的結束處加註釋。
2、8類的版式
類的版式主要有兩種方式:
1)將private類型資料寫前面,而將public類型的函數寫後面。這種版式主張類的設計“以資料位元中心”,重點關注類的內部結構。
2)將public類型函數寫簽前面,而將private類型資料寫後面。這種版式主張類的設計“以行為為中心”,重點關注類該提供什麼介面。建議採用此方式----不僅讓自己在設計類時思路清晰,且方便別人閱讀。
總結:程式的版式,怎麼叫好,怎麼叫不好,作者給出定義:清晰,美觀。怎麼叫清晰,怎麼叫美觀呢。首先應該是風格的統一,其次是美觀。那就先討論風格。風格不就是代碼的格式嘍。代碼的格式,總得知道代碼都是什麼類型吧。大概就是變數、函數、類、關鍵字、空格、空行,可別忘了注釋哈,剛開始一直糾結注釋寫代碼上面還是下面。還有‘{}’哈。