爲何有頭文件和.cpp文件? [關閉]

按照目前的狀況,這個問題不適合咱們的問答形式。 咱們但願答案獲得事實,參考或專業知識的支持,可是這個問題可能會引發辯論,爭論,民意調查或擴展討論。 若是您認爲此問題能夠解決而且能夠從新提出, 請訪問幫助中心以獲取指導。
7年前關閉。

爲何C ++具備頭文件和.cpp文件? 函數


#1樓

這是聲明接口的預處理器方式。 您將接口(方法聲明)放入頭文件中,並將實現放入cpp中。 使用您的庫的應用程序只須要知道接口,就能夠經過#include訪問該接口。 spa


#2樓

由於在C ++中,最終的可執行代碼不包含任何符號信息,因此它或多或少是純機器代碼。 設計

所以,您須要一種描述一段代碼界面的方法,該方法與代碼自己是分開的。 該描述在頭文件中。 接口


#3樓

好吧,主要緣由是要從實現中分離接口。 標頭聲明一個類(或正在實現的任何東西)將作什麼,而cpp文件定義了它將如何執行那些功能。 get

這減小了依賴性,所以使用標頭的代碼不必定須要瞭解實現的全部細節以及僅爲此所需的任何其餘類/標頭。 當實現中的某些內容發生更改時,這將減小編譯時間,並減小所需的從新編譯量。 編譯器

它不是完美的,一般您會使用Pimpl Idiom之類的技術來正確分離接口和實現,但這是一個好的開始。 io


#4樓

由於設計庫格式的人不但願「浪費」一些不多使用的信息,例如C預處理器宏和函數聲明。 編譯

因爲您須要該信息來告訴編譯器「連接器完成其工做後,此功能纔可用」,所以他們不得不拿出另外一個文件來存儲此共享信息。 class

C / C ++以後的大多數語言都將此信息存儲在輸出中(例如Java字節碼),或者根本不使用預編譯格式,老是以源代碼形式分發並即時編譯(Python,Perl)。 擴展


#5樓

一般,您將須要定義接口而沒必要交付整個代碼。 例如,若是您有一個共享庫,則將附帶一個頭文件,該頭文件定義了共享庫中使用的全部功能和符號。 若是沒有頭文件,則須要發送源代碼。

在單個項目中,至少將IMHO頭文件用於兩個目的:

  • 明確性,即經過將接口與實現分開,能夠更輕鬆地讀取代碼
  • 編譯時間。 經過在可能的狀況下僅使用接口,而不是完整的實現,能夠減小編譯時間,由於編譯器能夠簡單地引用該接口,而沒必要解析實際的代碼(理想狀況下,只需完成此操做便可)一次)。
相關文章
相關標籤/搜索