的.h文件包含在头文件和cpp文件

问题描述:

可能重复:
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

在你的第一段中,你似乎认为相同的.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