爲何C ++具備頭文件和.cpp文件? 函數
這是聲明接口的預處理器方式。 您將接口(方法聲明)放入頭文件中,並將實現放入cpp中。 使用您的庫的應用程序只須要知道接口,就能夠經過#include訪問該接口。 spa
由於在C ++中,最終的可執行代碼不包含任何符號信息,因此它或多或少是純機器代碼。 設計
所以,您須要一種描述一段代碼界面的方法,該方法與代碼自己是分開的。 該描述在頭文件中。 接口
好吧,主要緣由是要從實現中分離接口。 標頭聲明一個類(或正在實現的任何東西)將作什麼,而cpp文件定義了它將如何執行那些功能。 get
這減小了依賴性,所以使用標頭的代碼不必定須要瞭解實現的全部細節以及僅爲此所需的任何其餘類/標頭。 當實現中的某些內容發生更改時,這將減小編譯時間,並減小所需的從新編譯量。 編譯器
它不是完美的,一般您會使用Pimpl Idiom之類的技術來正確分離接口和實現,但這是一個好的開始。 io
由於設計庫格式的人不但願「浪費」一些不多使用的信息,例如C預處理器宏和函數聲明。 編譯
因爲您須要該信息來告訴編譯器「連接器完成其工做後,此功能纔可用」,所以他們不得不拿出另外一個文件來存儲此共享信息。 class
C / C ++以後的大多數語言都將此信息存儲在輸出中(例如Java字節碼),或者根本不使用預編譯格式,老是以源代碼形式分發並即時編譯(Python,Perl)。 擴展
一般,您將須要定義接口而沒必要交付整個代碼。 例如,若是您有一個共享庫,則將附帶一個頭文件,該頭文件定義了共享庫中使用的全部功能和符號。 若是沒有頭文件,則須要發送源代碼。
在單個項目中,至少將IMHO頭文件用於兩個目的: