【C++】函式的分檔案編寫
cpp函式的分檔案編寫
作用:讓程式碼結構更加清晰
如下步驟:
- 建立字尾名為.h的標頭檔案
- 建立字尾名為.cpp的原始檔
- 在標頭檔案中寫函式的宣告
- 在原始檔中寫函式的定義,同時引入自定義標頭檔案,將標頭檔案與原始檔繫結
- 在使用函式的地方,使用
""
呼叫.h標頭檔案,在使用的地方直接使用函式
原本的實現方式,函式的宣告、實現、使用都寫在一個test.cpp檔案中
test.cpp:
#include <iostream> using namespace std; // 函式的分檔案編寫 // 實現兩個數字進行交換的函式 // 函式的宣告 void swap(int a, int b); // 函式的定義 void swap(int a, int b) { int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl; } int main() { int a = 10; int b = 20; swap(a, b); system("pause"); return 0; }
當代碼量變大的時候,這會讓整個程式碼的結構不夠清晰
解決辦法:通常將一些函式的實現和函式的宣告分開到一些檔案中,單獨地去使用
- 建立swap.h檔案
- 建立swap.cpp檔案
將剛才test檔案中swap函式的宣告放入swap.h,swap函式的實現過程放入swap.cpp
swap.h:
#pragma once
void swap(int a, int b);
swap.cpp
void swap(int a, int b) { int temp = a; a = b; b = temp; cout << "a = " << a << endl; cout << "b = " << b << endl; }
此時需要將swap.h和swap.cpp檔案關聯起來:在函式具體實現的地方引入自定義標頭檔案,讓自定義標頭檔案不僅有函式的宣告而且還能找到具體的函式實現
#include "swap.h" // 將函式實現cpp檔案與自定義標頭檔案關聯起來
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
上面的操作就會讓函式的實現與自定義標頭檔案綁在一起,以後要使用這個函式的時候,只需要引入這個自定義標頭檔案
此時編譯器會報錯,提示:
因為cout
是包含在另外一個頭檔案中的,可以在這個cpp檔案中直接引入這個標頭檔案,也可以在swap.h中將這個標頭檔案引入
swap.h:
#pragma once
#include <iostream>
using namespace std;
void swap(int a, int b);
此時cpp中不會再有報錯
經過上面的操作後,要在test.cpp中使用函式的話,不再像最開始那樣一堆程式碼在一塊,可以變得很簡潔。
test.cpp:
#include <iostream>
#include "swap.h"
using namespace std;
int main() {
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
此時swap函式可以在test.cpp檔案中使用
總結:
將函式的宣告以及函式可能使用的一些標頭檔案,寫入一個自定義標頭檔案,引入自定義標頭檔案時,需要使用""
寫好標頭檔案後,再單獨寫一個函式的實現cpp,在這個cpp中,標頭檔案只需要引入自定義標頭檔案即可。
此時這個標頭檔案就與這個函式實現cpp繫結在了一起,這個標頭檔案不光有函式的宣告,還可以找到這個函式的具體實現
當頭檔案、函式具體實現cpp都寫好了後,我們在別的地方想呼叫這個函式的時候,只需要引入自定義標頭檔案即可,然後直接呼叫函式,無需將函式實現,因為編譯器可以通過這個自定義標頭檔案自動找到呼叫的函式的具體實現。
所有的檔案最終實現如下:
swap.h:
#pragma once
#include <iostream>
using namespace std;
void swap(int a, int b);
swap.cpp:
#include "swap.h"
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
test.cpp:
#include <iostream>
#include "swap.h"
using namespace std;
int main() {
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
簡而言之,自定義標頭檔案起到串聯的作用,在自定義標頭檔案中是函式的宣告以及一些函式的實現必要的標頭檔案。具體函式的實現的位置會將自定義標頭檔案引入,這樣自定義標頭檔案就可以找到這個具體的函式實現,以後要使用的時候,不需要再把函式的實現寫一遍,引入自定義標頭檔案,就等同於引入了這個函式的實現,可以直接使用這個函式。