高品質C++編程指南學習筆記1-2章—thanks to林銳

來源:互聯網
上載者:User

看這本書主要是想規範下自己的編程習慣,所以看完只是開始,以後在實踐中多運用。美好的期待。

簡介:導讀中說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類型資料寫後面。這種版式主張類的設計“以行為為中心”,重點關注類該提供什麼介面。建議採用此方式----不僅讓自己在設計類時思路清晰,且方便別人閱讀。

總結:程式的版式,怎麼叫好,怎麼叫不好,作者給出定義:清晰,美觀。怎麼叫清晰,怎麼叫美觀呢。首先應該是風格的統一,其次是美觀。那就先討論風格。風格不就是代碼的格式嘍。代碼的格式,總得知道代碼都是什麼類型吧。大概就是變數、函數、類、關鍵字、空格、空行,可別忘了注釋哈,剛開始一直糾結注釋寫代碼上面還是下面。還有‘{}’哈。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.