2012-08-09 202 views
2

可能重複:
What is the purpose of forward declaration?
Forward Declaration vs Include的.h文件包含在頭文件和cpp文件

我有點困惑,在頁眉和自備電廠的#include *.h文件包含文件。我看到一些.h文件被包含在頭文件中,一些在相應的cpp文件中。我猜測所有需要的.h文件都需要包含在頭文件中,因此沒有看到它們被包含在cpp文件中的原因。這有什麼特別的原因嗎?

此外,我看到使用Class ClassName;的頭文件中包含了一些所需的類。這與在頭文件中僅包含ClassName.h有什麼不同?

+0

[前向聲明的目的是什麼?](http://stackoverflow.com/questions/3110096/what-is-the-purpose-of-forward-declaration),[Forward Declaration vs Include] (http://stackoverflow.com/questions/3632818/forward-declaration-vs-include),[前進聲明/何時最好包括標頭?](http://stackoverflow.com/questions/10469531/forward-declaration-什麼時候最好包含頭文件),[前向聲明有什麼缺點?](http://stackoverflow.com/questions/9470961/what-are-the-drawbacks-of-forward-declaration) – 2012-08-09 01:56:50

回答

1

在你的第一段中,你似乎認爲相同的.h文件包含在類的頭文件和類的.cpp文件中?這只是一個疏忽,因爲包含一個包含其他文件的文件,根據定義,還包括那些其他文件。您可以刪除.cpp文件中的重複包含。

在你的第二段中,你所看到的是一個類的前向聲明。如果你不需要在頭文件中定義類的定義,那麼有時候最好只是前向聲明它。這樣,包含頭文件的文件不依賴於類的定義。這減少了文件之間的依賴關係。僅需要前向聲明的一個示例是,如果一個類包含一個成員變量,該成員變量是指向類的指針而不是類本身。

+0

In第一段,我的意思是不同的.h文件包含在頭文件和相應的cpp文件中。我問是否所有這些不同的.h文件都可以包含在deader文件中。 – lordlabakdas 2012-08-09 02:14:45

+0

在第二段中,被包含的類實際上是另一個在其他地方被聲明和定義的類。我問是否足以在頭文件中包含'ClassName.h'而不是調用'class ClassName;'。 – lordlabakdas 2012-08-09 02:18:20

+0

它們*都可以全部包含在頭文件中,但是這會不必要地增加編譯時間,並且還會消耗一大堆使用頭文件的依賴項。因此,最好在頭文件中儘可能使用前向聲明(如'class ClassName;'),並且只在源文件中包含完整頭文件。 – 2012-08-09 02:20:35