在不同的代碼庫環顧我看到各種款式:標題和CPP或只是CPP文件 - 最佳實踐?
類「接口」的頭文件,並在cpp文件的實際IMPL定義。在這種方法中,頭文件看起來很好定義並易於閱讀,但cpp文件看起來很混亂,因爲它只是一個方法列表。
我看到的第二種方法就是把所有東西都放在一個類的cpp文件中。這些類文件在類定義的主體中包含定義和實際方法impls。這種方法對我來說更好(更像Java和c#)。
我應該使用哪種風格?
在不同的代碼庫環顧我看到各種款式:標題和CPP或只是CPP文件 - 最佳實踐?
類「接口」的頭文件,並在cpp文件的實際IMPL定義。在這種方法中,頭文件看起來很好定義並易於閱讀,但cpp文件看起來很混亂,因爲它只是一個方法列表。
我看到的第二種方法就是把所有東西都放在一個類的cpp文件中。這些類文件在類定義的主體中包含定義和實際方法impls。這種方法對我來說更好(更像Java和c#)。
我應該使用哪種風格?
爲所有,但最簡單的程序,風格#2是根本不可能的。如果您使用來自多個其他.cpp
文件的函數定義的#include
a .cpp
文件,則定義將被添加到多個目標文件(.o
/.obj
),並且鏈接器將會抱怨衝突符號。
使用風格#1和學會生活在混亂。
前者 - 實現文件中的頭文件和類體中的接口。你會發現這在處理大型系統時會導致更少的問題。
由於您使用C++進行了標記,因此請選擇第一種樣式。對於Java程序員來說,我不覺得困惑,它可能看起來不同,但在C++中,您總是會使用這種方法。
實際上,在我最喜歡的IDE(MSVS)中,我並排打開了頭文件和cpp文件。使查找原型,和類聲明容易。
而當你有十幾個班;一打.h文件和另外十幾個.cpp文件,將使您的工作變得更簡單。因爲,當你想看看什麼是班級時,你只需打開相關的.h文件,然後看看班級成員,也許是簡短的評論。您不需要通過幾行深入的代碼。
結論:您給出的樣式選項僅適用於小代碼,通常是單個文件,只有很少的方法等。否則,它甚至不是一個選項。 (@Thomas給出了爲什麼#2甚至沒有選項的原因)
C++不使用「接口」,他們使用類 - 基類/派生類。如果項目很小,我使用一個文件來定義類/及其實現方法,如果項目很大,則使用單獨文件。 在java中,我將它們打包成一個包,然後在需要時導入它。
部首(HPP):
標題包括代碼,特別是函數聲明的聲明。從技術上講,類是在頭文件中定義了,但同樣,成員函數只是聲明。
其他文件中的代碼將只包含此標題並保留所有必要的信息。
實施(CPP):
實現包括的功能,成員函數和變量的定義。
理由:
使用#style 1,即使是簡單的程序。所以你可以輕鬆地學習。這可能看起來過時了,特別是在現代多通道編譯器的背景下。但是單獨的頭文件甚至在今天是有益的。關於下一個C++ - 標準的傳言出現了,據我所知符號出口(Java或C#)將成爲可能。但是不要讓我失望!
注:
- 成員函數,它們定義一個類裏面默認在線,通常你不想要這個
- 使用總是定義衛士
如果你是開發大型項目,你會發現第一種方法可以幫助你很多。第二種方法可能會幫助你做小型項目。隨着您的項目變得越來越大,複雜性管理是軟件開發的一個大問題,而第一種方法是更好的選擇。
我要做的就是:
這樣我得到:
你是如何打算從另一個CPP訪問您的類文件與第二? – 2012-02-04 11:53:49
準確。第二種方法只在將所有內容放在一個巨大的cpp文件中時才起作用。這不是一個好主意。 – 2012-02-04 11:55:53