1. 程式人生 > 其它 >動態元件+插槽 +自定義指令

動態元件+插槽 +自定義指令

C++學習筆記

有原始檔.c不就夠了嗎?為什麼要有標頭檔案.h?

要回答這個問題,首先我們需要理解C++編譯模式。

重要:理解C++編譯模式 (函式宣告和函式定義、符號表、連結)

首先理解下這句話:一個C++程式可以分多個cpp檔案來實現。

C++ 語言支援"分別編譯"(separatecompilation)。也就是說,一個程式所有的內容,可以分成不同的部分分別放在不同的 .cpp 檔案裡。
然後,C++的編譯是相對獨立的,每個cpp都可以單獨的被編譯(雖然可能因為有未知函式的導致無法執行)。最後要使得整個程式跑起來只需要 “連結”。
.cpp 檔案裡的東西都是相對獨立的,在編譯(compile)時不需要與其他檔案互通,只需要在編譯成目標檔案後再與其他的目標檔案做一次連結(link)就行了。比如,在檔案 a.cpp 中定義了一個全域性函式 "void a(){}",而在檔案 b.cpp 中需要呼叫這個函式。即使這樣,檔案 a.cpp 和檔案 b.cpp 並不需要相互知道對方的存在,而是可以分別地對它們進行編譯,編譯成目標檔案之後再連結,整個程式就可以運行了。

標頭檔案是和#include一起配合來提高效率的工具而已。

如果一個原始檔中使用了很多函式,一個一個宣告是很麻煩的,也考驗程式設計師的記憶力。所以把一些函式宣告放在一個頭檔案.h中。如果一個程式設計師需要使用這些函式,則通過 #include "xxx.h" 一句話就很方便可以完成多個函式的宣告。

標頭檔案裡一般只寫一些函式宣告,不寫函式實現。
為了通過#include (預編譯命令:只是複製插入程式碼) 方便的宣告多個函式。這樣接下來就可以直接使用這個庫的所有函數了(而不用擔心有沒有漏掉宣告

例子:
原始檔.cpp和標頭檔案.h應該寫什麼?

一些小知識

#include "xxx.h"
#include <xxx.h>的區別?

系統庫用<> , 使用者自己寫的用 ""

  • 防止重複匯入同一個標頭檔案
#ifndef HEADER_FILE
#define HEADER_FILE

...

#endif