一.c++程式的多檔案結構
之前雞啄公尺給大家看了很多比較完整的c++程式的例子,大家可能發現了,它們的結構基本上可以分為三個部分:類的宣告、類的成員函式的實現和主函式。因為**比較少,所以可以把它們寫在乙個檔案中,但是我們實際進行軟體開發時,程式會比較複雜,**量比較大,
乙個程式按結構至少可以劃分為三個檔案:類的宣告檔案(*.h檔案)、類的實現檔案(*.cpp檔案)和主函式檔案(使用到類的檔案),如果程式更複雜,我們會為每個類單獨建乙個宣告檔案和乙個實現檔案。這樣我們要修改某個類時就直接找到它的檔案修改即可,不需要其他的檔案改動。
雞啄公尺在第十九講中講生存期時有個時鐘類的例子,現在雞啄公尺給大家看下將那個程式按照上面說的結構分到三個檔案裡:
// 檔案1:clock類的宣告,可以起名為clock.h
#include
using namespace std;
class clock //時鐘類宣告
private: //私有資料成員
int hour,minute,second;
};// 檔案2:clock類的實現,可以起名為clock.cpp
#include "clock.h"
//時鐘類成員函式實現
clock::clock() //建構函式
void clock::settime(int newh,int newm,int news)
void clock::showtime()
// file1.h檔案
#include "head.h"
…// file2.h檔案
#include "head.h"
…// head.h檔案
...class a
...main.cpp包含了file1.h檔案,file1.h又包含了head.h檔案,main.cpp還包含了file2.h檔案,file2.h也包含了head.h檔案,那麼main.cpp就包含了兩次head.h檔案,在編譯時就會報錯,說head.h中的類a重複定義了。這時我們可以在被重複包含的檔案head.h中使用條件編譯指令,用乙個唯一的識別符號來標識head.h檔案是否已經編譯過,如果已經編譯過則不會重複編譯了。雞啄公尺給大家改寫下上面的head.h檔案:
// head.h檔案
#ifndef head_h
#define head_h
...class a
...#endif
在這個改好的head.h檔案中,上來會先判斷head_h是否被定義過,如果沒有被定義過,則head.h檔案還沒參與過編譯,就編譯此檔案中的源**,同時定義head_h,標記head.h檔案已經參與過編譯。如果head_h已經被定義過,則說明此檔案已經參與過編譯,編譯器會跳過本檔案左右內容編譯其他部分,類a也不會有重複定義的錯誤了。
C 多檔案結構和編譯預處理命令
1 一般乙個專案至少劃分3個部分 類定義檔案,類實現檔案,類使用檔案。2 外部變數 在原始檔1中定義的變數,可以在原始檔2通過關鍵字加以宣告之後應用。原始檔1 includeusing namespace std int i 1 int main 原始檔2 includeusing namespac...
十八 C 程式設計必知 作用域和可見性
主要有四種 函式原型作用域 塊作用域 類作用域 檔案作用域1 函式原型作用域如 void fun int x 該函式宣告中的形參作用域就是函式原型作用域。形參x有效的範圍就在左 右兩個括號之間。x的作用域就是函式原型作用域。是最小的作用域。2 塊作用域這裡理解的塊,就是一對大括號括起來的一段程式。作...
c 單獨編譯和c 的多檔案組織結構
1.通常當乙個程式 較多較複雜時,我們會把乙個程式分為幾個部分,存放在不同的資料夾中,對於乙個不是很複雜的程式,通常大概可以分為三個部分,乙個標頭檔案,兩個源 檔案。標頭檔案中通常包含以下內容 函式原型 使用 define或const定義的符號常量 結構體宣告 類宣告 模板宣告 內聯函式 2.在包含...