簡體   English   中英

C ++:在頭文件中包含類定義

[英]C++: including a class definition in a header file

許多帖子非常堅定,源代碼不應該放在標題中,並且頭文件應該保持在最低限度。 我一直堅持使用我自己的代碼,但我想使用別人的代碼來實現一個特定的目標(這里的代碼記錄在http://ftp.arl.mil/random/ )。

我注意到這基本上是一個定義類的巨型頭文件。 將它保留在頭文件中可以嗎? 我應該將它全部復制到.cpp文件並創建一個新的.h,它只是聲明函數,結構等嗎?

如果我按照我的建議把它分成.cpp和.h,它會起作用嗎? 或者類需要在標題中以便所有源代碼訪問?

需要在多個cpp文件中看到的聲明(聲​​明存在某些內容)應該放在頭文件中。 單個cpp文件本地的聲明應該在cpp文件本身中。

定義(提供函數體或分配/初始化變量)通常應該放在cpp文件中,但並不總是如此。

您需要了解的問題是編譯器是否有足夠的信息來完成其工作,如果它已經看到頭文件而不是相應的cpp文件。

例如:如果編譯器已經看到聲明(方法原型),你可以調用一個方法 - 除非該方法是通用的(模板化方法或模板化類的成員)或內聯,在這種情況下編譯器需要看到定義(方法體)也是。

因此,正常的方法進入cpp文件; 模板化方法進入頭文件; 內聯方法進入頭文件(等等)。

在其他情況下,定義屬於頭文件,包括靜態成員常量。 這一切都回到給編譯器一方面需要的信息,另一方面最小化單獨的可編譯單元之間的耦合。 同樣,沒有嚴格的規則,只是指導程序與編寫代碼的開發人員的知識和經驗相結合。

.h文件通常在許多.cpp文件之間共享。 全局變量和函數代碼不應該在頭文件中,因為它會在鏈接期間產生重復。

常量,定義,函數頭和類聲明在頭文件中都很好。 您不必多次聲明相同的內容,並且可以在.cpp文件之間共享定義。

源代碼不應該放在標題中,並且頭文件應該保持最小。

這是一個流行的斷言,雖然它通常不是一個建議,但你不應該從中得出絕對的結論。 有時標題應該是最小的,不包括定義。 有時情況恰恰相反。 你有理由去做其中一個,但“人們說”不是其中之一。

考慮C ++標准庫。 更好的是,考慮一下Boost。 一些着名的C ++專家表示,Boost是歷史上設計最精良的C ++庫。 但是如果你看看這些庫,你會發現它們基本上只是巨大的頭文件。 這如何與“他們”所說的相協調?

重點在於:您必須了解某些文件按原樣設計的原因,並對每種情況的正確和錯誤做出自己的想法。

我應該將它全部復制到.cpp文件並創建一個新的.h,它只是聲明函數,結構等嗎?

我想說可能不是。 這聽起來像是對我來說維護噩夢的秘訣。 這是我第一次使用第三方庫的本能,就像圖書館作者所希望的那樣。 這樣你就不會離開支持網格,並且你不會引入一系列新的復雜功能,你將完全靠自己來弄清楚。 除非你有一個特定的,可證明的理由來改變圖書館的架構,否則不要。 “他們說”對我來說不是一個足夠好的理由。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM