C++ 在.h文件中包含頭文件和在.cpp文件中包含頭文件有什麼區別

原文:https://blog.csdn.net/xueruifan/article/details/50569639ios

 

現有兩個文件Test.h 和Test.cpp
 #include <iostream>在Test.h中包含 和在Test.cpp中包含有什麼區別?
一、在cpp文件中包含.h文件,要麼你要用到這個頭文件中的函數或者類,要麼就是實現這個頭文件;
二、.h ---就是爲了放一堆聲明所產生的東西。
若是是定義放在.h中。     若是.h被重複包含屢次,那麼則會被報重定義。因此在.h 中都要---若是函數就要是inline ,若是是變量就要 selectany (windows)纔不會被報錯。
三、#include儘可能寫到cpp文件裏。兩個文件在.h文件裏相互include,就會產生編譯錯誤,而兩個文件在.c文件互相include,就不會有該問題,所以在.h文件include就要避免互相包含的問題,而.cpp文件就不須要考慮
四、1)在 .h 裏面 include 的好處是:
若是不少.c,.cpp文件,都包含一批頭文件,
若是複製很容易遺漏
若是輸入,很容易出錯

若是所有在一個.h, include  那麼每一個.c,.cpp文件只須要一個#include 語句
這樣不只輸入量減小,
並且代碼也美觀多了
代碼也主次分明瞭
畢竟,.c.cpp, 裏面
要實現的函數,纔是主要代碼

2)主要缺陷,
可能會包含徹底不須要的頭文件,
增長編譯工做量
五、若是你在a.h頭文件中include了「stdio.h」,「iostream」,……一大堆
那麼你的a.cpp源文件只要include你的a.h,就至關於include了「stdio.h」,「iostream」,……一大堆
可是當其餘文件include你的a.h的同時也就包含了「stdio.h」,「iostream」,……一大堆

這個要看你我的須要,若是你須要讓其餘文件也include一大堆,那麼寫在a.h中就能夠,其餘文件包含a.cpp簡單整潔無腦
若是隻有a.cpp須要include一大堆,那麼仍是建議在a.cpp中include一大堆
六、若是a.c包含了頭文件a.h,a.h包含了頭文件b.h,b.c也包含了b.h,那麼當b.h發生改變時,a.c和b.c都會從新編譯
也就是全部包含了b.h的都會從新編譯,不管是直接包含,仍是間接包含
七、2點原則:

第一個原則:若是能夠不包含頭文件,那就不要包含了,這時候前置聲明能夠解決問題。若是使用的僅僅是一個類的指針,沒有使用這個類的具體對象(非指針),也沒有訪問到類的具體成員,那麼前置聲明就能夠了。由於指針這一數據類型的大小是特定的,編譯器能夠獲知(C++編譯器自上而下編譯源文件的時候,對每個數據的定義,老是須要知道定義的數據的類型的大小) 第二個原則:儘可能在CPP文件中包含頭文件,而非在頭文件中。假設類A的一個成員是是一個指向類B的指針,在類A的頭文件中使用了類 B的前置聲明並編譯成功,那麼在A的實現中咱們須要訪問B的具體成員,所以須要包含頭文件,那麼咱們應該在類A的實現部分(CPP文件)包含類B的頭文件而非聲明部分(H文件)windows

相關文章
相關標籤/搜索