c++接觸的很少,之前也只是會編寫一個簡單的cpp文件,但一個工程的實現,往往不僅包括源文件(.cpp后綴文件)一般還有頭文件(.h后綴文件)等。一個c++工程中只能有一個main函數,這個函數所在的文件類似於前端中的入口文件,即從main函數開始執行整個工程。即有多個cpp文件,這些文件中也只有一個入口文件
說明,這里可以使用微軟的visual studio進行編譯運行,但實際在使用的過程中,可能vs反應很慢,所以,我們可以減少vs的一些不必要的功能。比如進入 工具 -> 選項 -> 源代碼管理 -> 源代碼管理插件 修改為無,另外,也可以在選項中將visual studio定期進行的更新關閉,或者其他一些沒有必要的輔助功能都是可以關閉的,以增加運行效率。
基本概念之頭文件
頭文件就是.h后綴結尾的文件。 如下所示,是一個頭文件:
#ifndef __OUTFILE_FRAMEDATA_H__ #define __OUTFILE_FRAMEDATA_H__ #include "outfile.h" class Outfile_framedata : public Outfile { private: FILE *pFile; int frameCount; int num_of_dots; int recordlength; void FWriteInt(FILE* fp, int val); void FWriteFloat(FILE* fp, double val); void FWriteString(FILE* fp,const char* str); public: Outfile_framedata(const char* file, int Nx, int Ny); ~Outfile_framedata(void); void writeFrame(double **matrix, int Nx, int Ny); }; #endif
從這個文件中我們可以看出頭文件的一些特點:
- 定義了類,包括類的變量和方法,但是方法只是聲明,具體語句沒有寫。 頭文件必須要有下面的幾個語句。 且一般要求后面的文件前后有__來作為補充,另外要求英文字母全部大寫,比如這個例子中這個.h文件名稱為outfile_framedata.h。
- #ifndef 即if not define的縮寫,意思是如果沒有定義。
- #define 那么就定義。
- #endif 結束if
- 而上面三個必要語句的作用就是可能會有多個cpp文件使用這個頭文件(頭文件也有可復用的作用),如果這個頭文件沒有被編譯,就會進行編譯,否則,就不需要再編譯了,起了防止重復編譯的作用。
基本概念之源文件
源文件是工程中最重要的部分。 一般源文件的開頭會引用頭文件,如使用#include的方式進行引用 。
c++工程
如上,我們建立了一個project工程(使用visual studio 2013)。 通過源文件上右鍵,就可以添加源文件,其他類似。
如下所示,這是我們建立的文件。
circle.h源代碼如下所示:
#ifndef __CIRCLE_H__ #define __CIRCLE_H__ class Circle { private: double r; // 半徑 public: Circle(); // 構造函數 Circle(double R); // 構造函數 double Area(); // 求面積函數 }; #endif
這個文件中就是定義了Circle這個類以及類中的私有變量和一些函數,而函數具體的語句是不需要寫的。
circle.cpp文件如下所示:
#include <iostream> #include "circle.h" Circle::Circle() { this->r = 5; } Circle::Circle(double R) { this->r = R; } double Circle::Area() { return 3.14 * r * r; }
這個文件當中,我們將circle.h中未定義的函數進行了定義包括兩個構造函數以及一個計算圓面積的函數。注意文件頭要引入circle.h文件。
注意:構造函數的作用是為了初始化工作,而析構函數是為了釋放內存空間。一般,一個類可以有多個構造函數,但卻只能有一個析構函數。如果類中沒有自定義的析構函數,就會調用默認的析構函數完成清理工作,釋放堆中分配的內存。
main.cpp文件如下:
#include <iostream> #include "circle.h" using namespace std; void test(double a); int main() { double a = 1.0; cout << "Please input the circle raduis: " << endl; cin >> a; test(a); Circle c(a); cout << "the area of the circle is : " << c.Area() << endl; return 0; } void test(double a) { try { if (a < 0) { throw 0; } } catch (int) { cerr << "the number " << a << " is not fit for this!" << endl; exit(1); } }
這個文件中,我們同樣需要引入頭文件 circle.h, 而不需要引入 circle.cpp,這個工程的入口文件就是main.cpp。 注意: 文件中 test是用於處理c++程序異常的。
ctrl + F5可以執行整個工程,最終執行效果如下所示:
ok,這就是一個最為基本的c++工程了。
打開工程文件
選擇 文件 - 打開 - 項目/解決方案,然后找到對應文件的 vcxproj 后綴文件即可在 visual studio 中打開此工程。然后ctrl + F5即可運行。