簡體   English   中英

C ++最佳實踐-什么時候應該將項目分為.h和.cpp文件?

[英]Best practice in C++ - when should I divide my project into .h and .cpp files?

我從一個新項目開始。 我知道,將項目分為.h和.cpp的想法很好,但是在編寫和測試代碼時,這對我來說很煩。

在編寫新代碼時將項目分為.h和.cpp是一種好習慣嗎?

還是用.h編寫整個類,然后將其拆分為.h和.cpp(當我的項目完成或接近完成時)會更好嗎?

還是應該在.cpp文件中只編寫新類,然后創建單個.h文件?

您應該始終考慮拆分實際的代碼及其聲明,這不僅是一種好習慣,而且還應作為適用的嚴格規則。 除非您正在編寫模板,否則在這種情況下,它們的聲明和定義都將放在頭文件中(即Boost的代碼,在大多數情況下, 僅模板 )。 但是正如評論中提到的那樣,即使使用模板,您仍然可以將definitionclarification分開。

建議避免在開發過程中產生很多痛苦。 不這樣做可能會給您帶來麻煩。 值得注意的是,每次對頭文件中的代碼進行更改時,或者由於多個包含項最終導致您花費大量時間,讓編譯器重新編譯一堆東西。

在除最瑣碎的項目以外的所有項目中,或者在僅某些特殊頭文件的庫中,將其拆分為單獨的.h和.cpp文件是一個好習慣。 除了小型私人幫助程序類外,每個類都有一個單獨的.h&.cpp文件是一種好習慣。 例外可能是模板類和接口,它們只能是頭文件。

一旦養成習慣,它就不會特別令人討厭。 實際上,這使項目管理更加容易。

.h文件通常用作代碼的外部接口,因此請在它們中盡可能少地公開它們,並在.cpp文件中隱藏實現細節。 有時我只在.h文件中放一個函數,而在.cpp中完全隱藏了一個類。

如果您具有循環依賴關系或遞歸數據結構,那么如果未很好地拆分.h和.cpp文件,則可能會遇到問題。

如果真的是通用代碼(模板,contexpr,宏...),則實際上只需要將所有內容都放在.h中。

這取決於您要解決的問題以及您的目標。 通常的約定是為每個類使用一對頭文件和實現文件。 (除非您要編寫模板類,而模板類必須完全放入頭文件中)。

現在,當您只是快速測試一些小東西時,將所有代碼粘貼在單個cpp文件中是完全合適的。 但是只要您的項目滿足以下任一條件:

  • 該項目不僅僅是一個簡單的算法/實驗
  • 其他開發人員將為此工作
  • 該項目將持續一段時間(即將被開發,使用和維護)

您絕對應該遵守慣例。

現在,我承認這需要付出更多的努力,這似乎令人生畏-但也有一些工具可以幫助您解決這一問題。 例如,有用於Visual Studio的Visual Assist ,可以幫助將成員定義添加到相應的cpp文件中,好的編輯器支持使用熱鍵在標頭和實現之間進行切換,等等。

還有LZZ ,它允許您將所有代碼保存在一個文件中,並從中生成hcpp文件,盡管除非您已經有處理大型項目的豐富經驗,否則我不建議您這樣做。

暫無
暫無

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

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