用C++編寫比較大型的項目時,文件的分割管理確實確實是非常必要的 。下面就非常簡潔明了地談談頭文件(.h)和源文件(.cc)應該怎么寫。
頭文件(.h):
寫類的聲明(包括類里面的成員和方法的聲明)、函數原型、#define常數等,但一般來說不寫出具體的實現。
在寫頭文件時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下):
#ifndef CIRCLE_H #define CIRCLE_H //你的代碼寫在這里 #endif
這樣做是為了防止重復編譯,不這樣做就有可能出錯。至於CIRCLE_H這個名字實際上是無所謂的,你叫什么都行,只要符合規范都行。原則上來說,非常建議把它寫成這種形式,因為比較容易和頭文件的名字對應。
源文件(.cc):
源文件主要寫實現頭文件中已經聲明的那些函數的具體代碼。需要注意的是,開頭必須#include一下實現的頭文件,以及要用到的頭文件。那么當你需要用到自己寫的頭文件中的類時,只需要#include進來就行了。
Example:
下面舉個最簡單的例子來描述一下,咱就求個圓面積。
第1步,建立一個空工程。
第2步,在頭文件的文件夾里新建一個名為Circle.h的頭文件,它的內容如下:
#ifndef CIRCLE_H #define CIRCLE_H class Circle ...{ private: double r;//半徑 public: Circle();//構造函數 Circle(double R);//構造函數 double Area();//求面積函數 }; #endif
注意到開頭結尾的預編譯語句。在頭文件里,並不寫出函數的具體實現。
第3步,要給出Circle類的具體實現,因此,在源文件夾里新建一個Circle.cc的文件,它的內容如下:
#include "Circle.h" Circle::Circle() ...{ this->r=5.0; } Circle::Circle(double R) ...{ this->r=R; } double Circle:: Area() ...{ return 3.14*r*r; }
需要注意的是:開頭處包含了Circle.h,事實上,只要此cpp文件用到的文件,都要包含進來!這個文件的名字其實不一定要叫Circle.cc,但非常建議cc文件與頭文件相對應。
最后,我們建一個test.cc來測試我們寫的Circle類,它的內容如下:
#include <iostream> #include "Circle.h" using namespace std; int main() ...{ Circle c(3); cout<<"Area="<<c.Area()<<endl; return 1; }
注意到開頭時有#include "Circle.h"的聲明,證明我們使用到了我們剛才寫的Circle類。
參考文章:C++中頭文件(.h)和源文件(.cpp)都應該寫些什么