C++筆記:頭文件的作用和寫法

在 C++ 中有一個很重要的概念就是頭文件

之所以在 C++ 中要使用頭文件,最主要的原因是 C++ 的同一個項目可能有多個源代碼文件,要命的是這些源代碼是分別單獨編譯的

也就是說,在編譯其中一個文件時,編譯器並不知道其它文件中定義的內容,如類、全局變量等。

這就要求我們必須在要使用某個類、函數或變量的每個文件中聲明它,否則 C++ 是無法找到它的。

例如:假設你寫了一個通用的函數 add,它的定義如下:

int add(int a, int b)
{
   return a+b;
}

很多文件可能都需要使用加法。假設有一個文件 b.cpp 需要使用這個函數,那麼,它必須先聲明它,雖然不需要再重寫。

int add(int a, int b);
add(5,5);

如果有很多文件都要使用這個函數,那麼這會變得麻煩,特別的,如果你寫了一個類,那麼你需要維護大量的聲明(對於每一個 public 對象),並且如果你的類的定義發生了改變,你可能不得不改變無數個聲明。

所以,C++ 語言提出了頭文件的概念。你只需要在頭文件中聲明一次,在實現文件中定義一次,在所有需要用的文件中,就只需要引用這個頭文件,相當於每個文件都包含了一個聲明。

為了防止頭文件的重複包含,通常應該使用預處理指令 #define (定義符號)、#ifndef(如果沒有定義)、#endif(結束判斷)來書寫頭文件的內容。

請理解如下的例子,它是對上個筆記中的 Xiao 類的改進。

Xiao 類的實現(xiao.cpp)

#include "xiao.h"

bool Xiao::MobaiXiao()
{
		return this->mobai("xiao", 10000); // 正確
}
bool Xiao::mobai(char* cowname, int mobai_times)
{
		// 膜拜神牛。
		return true;
}

Xiao.h 頭文件

#ifndef XIAO_H
#define XIAO_H
class Xiao
{
public:
	bool MobaiXiao();
private:
	bool mobai(char* cowname, int mobai_times);
};
#endif

主程序

#include "xiao.h"

int main()
{
	(Xiao()).MobaiXiao (); // 正確
	//(Xiao()).mobai ("xiao", 10000); // 錯誤

    return 0;
}
当前页阅读量为: