本節書摘來自異步社群出版社《c++ 開發從入門到精通》一書中的第2章,第2.2節,作者: 王石磊 , 韓海玲,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
圖檔 1 知識點講解:CD光牒:視訊ppt講解(知識點)第2章分析c++的程式結構.mp4
程式結構是程式的組織結構,它包括語句結構、文法規則和表達式,内容包含了代碼組織結構和檔案組織結構。在c++開發中,我們必須嚴格遵循這些規則,才能編寫出高效、易懂的程式。
請讀者先看如下代碼。
在上述代碼中,整段程式被劃分為了如下3個部分。
1.注釋部分
即上述代碼中的首行,用雙斜杠标注。
<code>//這是一個示範程式,它從指令行讀入一個整數,然後加1再輸出。</code>
注釋部分即對目前程式的解釋說明部分,通常會說明此檔案的作用和版權等資訊。
2.預處理部分
即上述代碼中的第二行。
<code>#include <iostream.h></code>
預處理即在編譯前需要提前處理的工作。例如此段代碼表示編譯器在預處理時,将檔案iostream.h中的代碼嵌入該代碼訓示的地方,此處的#include是編譯指令。在檔案iostream.h中聲明了程式需要的輸入輸出操作資訊。
3.主程式部分
即剩餘的代碼。
此部分是整個程式的核心,用于實作此程式的功能。c++的每個可執行程式都有且隻有一個main函數,它是程式的入口點。執行c++程式後,首先會執行這個函數,然後從該函數内調用其他需要的操作。下面依次分析上述代碼的主要功能。
第1行“int x;”:表示定義一個對象,并命名為x,後面的分号表示此條代碼到此結束。
第2行“cout<<"請輸入一個數字:";”:表示通過cout輸出一行文字。此處的cout是c++中預定義的系統對象,當程式要向輸出裝置輸出内容時,需要在程式中用此對象,輸出操作符用“<<”表示,表示将“<<”右邊的内容輸出到“<<”左邊的對象上。例如此行代碼表示在标準輸出裝置上輸出字元串文字“請輸入一個數字:”。
第3行“cin>>x;”:cin代表标準輸入裝置的對象,即c++中的預定義對象。當程式需要從輸入裝置接受輸入時,就需要在程式中使用該對象。輸入的操作符是“>>”,表示将“>>”左邊接受的輸入放到右邊的對象中。當程式執行到該代碼時,會停止并等待來自标準輸入裝置的輸入。輸入完畢後按下“enter”鍵,cin會接收輸入并将輸入放到對應的對象中,然後跳到下一條代碼開始執行。
第4行“x=x+1;”:“+”當然是表示加法運算,将“+”兩邊的數字相加;“=”表示指派之意,将“=”右邊的運算結果放到“=”左邊的對象中去。
第5行“cout<<"x=x+1="<第6行“return 0;”:表示跳出目前程式,即傳回作業系統,使用數字0作為傳回值。
f:paiban電子書41885圖zy.png
注意:很多編譯器并不特别要求函數main必須有傳回值,例如visual c++,但是為了使讀者養成好的習慣,建議必須有傳回值。
如果是一個簡單的程式,僅僅需要幾行代碼就可以完成,這種情況是最簡單的,隻需一個檔案即可儲存所有的代碼,不需要我們在此讨論。例如圖2-2所示的結構。

圖2-2 簡單c++檔案結構
在圖2-2所示的結構中,隻有檔案first.cpp包含了目前項目中的程式代碼。但是在日常應用中,往往一個項目的程式代碼會比較複雜,例如經常需要另寫幾個類和一些過程函數。為了文檔的規整有序和程式的排錯,需要為文檔設定比較合理的安排方法。
① 每個類的聲明寫在一個頭檔案中,根據編譯器的要求可以加.h字尾名,也可以不加。這個頭檔案一般以類的名字命名。并且為了防止編譯器多次包含同一個頭檔案,頭檔案總是以下面的架構組織。
說明:classnameh 中的classname就是在這個檔案中聲明的類名。
② 将類的實作放在另一個檔案中,取名為 classname.cpp(classname為使用者在類聲明檔案中聲明的類名)。并且在該檔案中的第一行包含類聲明的頭檔案,如#include"classname"(c++新标準不支援帶.h的頭檔案)。然後在此檔案中寫類的實作代碼。一般格式如下。
<code>#include"classname"</code>
③ 與類相似,在編寫函數時,總是把函數的聲明和一些常數的聲明放在一個頭件中,然後把函數的具體實作放在另一個頭檔案中。
④ 通常來說,如果在某個源檔案中需要引入的頭檔案很多,或者為了源程式的簡潔,可以将頭檔案的引入功能寫在另一個頭檔案中,然後在源程式的第一行引入這個頭檔案即可。
⑤ 當在檔案中需要使用函數和類時,隻需引入類和函數聲明的頭檔案,而無需包含實作的檔案。
經過上述方法處理後,就會合理地為一個項目規劃好整體的檔案結構。在現實項目中,一個大型項目通常會包含很多.cpp檔案和函數檔案,例如圖2-3所示的結構。
圖2-3 複雜c++檔案結構