2010-04-05 101 views
6

是否應該在頭文件中聲明所有的結構和類?如果我在源文件中聲明一個結構體/類,那麼我需要在頭文件中放置什麼,以便可以在其他文件中使用它?另外,是否有任何資源顯示了C++的一些標準實踐?哪裏申報結構等?

回答

5

應該在頭文件中聲明所有結構體和類嗎?
是的。編輯:但他們的實現應該在cpp文件中。有時,來自C#或Java的用戶不會意識到C++中的實現可以完全獨立於類聲明。

如果我在一個源文件中聲明一個結構體/類,我需要在頭文件中放入什麼,以便它可以在其他文件中使用?
你不能。編譯器需要在使用該類的任何翻譯單元中提供的類的完整聲明。

此外,是否有任何資源顯示C++的標準做法?
你可以下載任何數量的開源應用程序的源代碼來查看。雖然你可能會看到唯一完全一致的東西,那就是使用標題守護進程,並在頭文件中保存所有的聲明。

+4

如果沒有在其他源文件中使用它的結構,則結構不必是頭文件。爲STL算法編寫的函子就是這樣一個例子。 – Naveen 2010-04-05 12:57:05

+3

我使用了很多結構體,它們都是實現細節 - 在.cpp文件中聲明 – 2010-04-05 13:02:45

+1

-1 Naveen和Neil都給出了爲什麼不應該在頭文件中聲明* ALL *結構體的原因。 OP的問題給出了一個誤導性的答案,特別是對於新手來說。 – 2010-04-05 13:10:48

2

頭文件的要點是聲明要在其他源文件之間共享的接口。通常,人們在頭文件中聲明抽象類型,並根據需要在源文件中實現它們。這意味着,當然新實現的類型只能用於特定的源文件。如果你需要跨多個文件使用類型(通常是這種情況),那麼你需要使用頭文件。

C++ faq通常是最佳實踐的重要資源。