c++头文件包含技巧
生活随笔
收集整理的這篇文章主要介紹了
c++头文件包含技巧
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C++ 中類的聲明和類的定義分開幾乎成了一個(gè)不成文的規(guī)定。這樣做的好處是使得類的聲明和實(shí)現(xiàn)分開,清晰明了,同時(shí)便于庫函數(shù)發(fā)布。但是在實(shí)際編程中由此也常常 引起了一些由于頭文件的包含順序問題而產(chǎn)生的符號(hào)未定義的編譯錯(cuò)誤,不明白其中原理有時(shí)會(huì)讓人很頭疼。要消除符號(hào)未定義的錯(cuò)誤的編譯錯(cuò)誤,最基本的一個(gè)做 法就是在引用一個(gè)符號(hào)(包括變量,函數(shù),結(jié)構(gòu),類等)之前確保它已經(jīng)聲明或者已經(jīng)定義。 ??? 實(shí)際中編碼設(shè)計(jì)過程中,最基本的一個(gè)原則就是在類的頭文件中最好不要包含其他頭文件,因?yàn)檫@樣會(huì)使類之間的文件包含關(guān)系變得復(fù)雜化。要最大限度的遵守這個(gè)原則,實(shí)際編碼設(shè)計(jì)過程可以采用以下兩種方法: ??? 方法一是在設(shè)計(jì)一個(gè)類的時(shí)候盡量保持類的獨(dú)立性,即使該類盡可能不要依賴其他類庫或者函數(shù)庫,或者退一步來說,盡量不要在類的聲明中依賴其他類。這樣,在 該類的聲明頭文件中就可以沒有其他頭文件。如果實(shí)現(xiàn)中用到了其他的類,那么可以只在該類的實(shí)現(xiàn)文件中包含用到的類庫或者函數(shù)庫的頭文件就行。 ??? 方法二是當(dāng)類的聲明中必須得用到其他類庫或者函數(shù)庫時(shí),方法一便不再適用,當(dāng)一個(gè)類聲明中引用的是其他類或結(jié)構(gòu)的指針引用或者是函數(shù)引用時(shí),也可以保持上 述原則,做法是采用前向引用,及在該類的聲明前面先聲明一下該類所用到的類名或者函數(shù)名就行。當(dāng)類聲明中引用的是其他類的實(shí)例時(shí),上述原則變不能保持,只 有在該類的聲明頭文件中引用所引用的類庫或者函數(shù)庫的頭文件。 然而,實(shí)際中,如果一個(gè)類要用到很多其他的類指針或者結(jié)構(gòu)指針或者函數(shù)名時(shí),雖然采用上述方法二可以保持上述原則,但是在該類的前面將所有用到的類和方法聲明一遍會(huì)比較麻煩,這種情況下,為了方便也只好在該類的聲明頭文件中加入其他類庫或者函數(shù)庫中的頭文件了。 下面舉幾個(gè)例子: 例子1:最簡單的一種情況:兩個(gè)類A和B之間完全沒有關(guān)系 這種情況下兩個(gè)類的聲明和定義文件中根本不需要包含對(duì)方的聲明頭文件。(雖然是廢話,但是很多人的代碼中卻大量存在這種情況下仍然互相包含或者包含頭文件的情況,主要原因:懶,不想多思考) 例子2:兩個(gè)類A和B在實(shí)現(xiàn)的時(shí)候用到了對(duì)方 這種情況只需要在每個(gè)類的實(shí)現(xiàn)文件文件中包含所用到的類的頭文件即可。 例子3:兩個(gè)類A和B在聲明的時(shí)候通過指針引用到了對(duì)方 這種情況下可以在類的聲明(頭文件中)前面聲明一下所用到的類,然后在各自的頭文件中包含所用的類的聲明頭文件。比如: // A.h class?? B;?? class?? A?? {?? B?? *pb;?? } // B.h? class?? A;?? class?? B?? {??
A?? *pa;?? } // A.cpp #inclue "B.h" #inclue "A.H" ...... // B.cpp #inclue "A.h" #inclue "B.h" ...... ??? 還有,在大型工程程序設(shè)計(jì)中,一個(gè)類往往需要用到很多已有的類庫及函數(shù)庫,把一個(gè)類所用到的所有類庫頭文件都加入到類的定義頭文件中往往也非常麻煩,這時(shí) 的做法是把那些經(jīng)常用到的頭文件加入到一個(gè)公共的頭文件中,這個(gè)公共頭文件在比如叫push.h。要注意的是一些頭文件也有依賴關(guān) 系,這些文件的包含順序也小心,否則就會(huì)出錯(cuò)。ps,頭文件的包含順序應(yīng)該是從最特殊到一般,比如:我們應(yīng)該以這樣的方式來#include頭文件: 從最特殊到最一般,也就是, #include "本類頭文件" #include "本目錄頭文件" #include "自己寫的工具頭文件" #include "第三方頭文件" #include "平臺(tái)相關(guān)頭文件" #include "C++庫頭文件" #include "C庫頭文件"
A?? *pa;?? } // A.cpp #inclue "B.h" #inclue "A.H" ...... // B.cpp #inclue "A.h" #inclue "B.h" ...... ??? 還有,在大型工程程序設(shè)計(jì)中,一個(gè)類往往需要用到很多已有的類庫及函數(shù)庫,把一個(gè)類所用到的所有類庫頭文件都加入到類的定義頭文件中往往也非常麻煩,這時(shí) 的做法是把那些經(jīng)常用到的頭文件加入到一個(gè)公共的頭文件中,這個(gè)公共頭文件在比如叫push.h。要注意的是一些頭文件也有依賴關(guān) 系,這些文件的包含順序也小心,否則就會(huì)出錯(cuò)。ps,頭文件的包含順序應(yīng)該是從最特殊到一般,比如:我們應(yīng)該以這樣的方式來#include頭文件: 從最特殊到最一般,也就是, #include "本類頭文件" #include "本目錄頭文件" #include "自己寫的工具頭文件" #include "第三方頭文件" #include "平臺(tái)相關(guān)頭文件" #include "C++庫頭文件" #include "C庫頭文件"
轉(zhuǎn)載于:https://www.cnblogs.com/zhanglanyun/archive/2012/02/02/2335889.html
總結(jié)
以上是生活随笔為你收集整理的c++头文件包含技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决.NET CF 3.5 Bitmap
- 下一篇: ZOJ2091(贪心)