在头文件和cpp文件中都包含.h文件

3

可能重复:
前向声明的目的是什么?
前向声明与#include有什么区别?

我对头文件和cpp文件中的#include *.h文件包含有点困惑。我看到一些.h文件包含在头文件中,而另一些则包含在相应的cpp文件中。我猜所有需要的.h文件都需要包含在头文件中,因此不明白为什么它们已经包含在cpp文件中了。这样做是否有具体原因?

另外,我发现有些必要的类使用Class ClassName;在头文件中被包含。这与只在头文件中包含ClassName.h有什么不同呢?


1个回答

2
在您的第一段中,您似乎在说同一个.h文件包含在类的头文件和类的.cpp文件中?这只是一个疏忽,因为按定义包含其他文件的文件也会包含那些其他文件。您可以在.cpp文件中删除重复的包含内容。
在您的第二段中,您看到的是一个类的前向声明。如果您不需要在头文件中使用该类的定义,那么有时候只需进行前向声明是一个好习惯。这样,包含头文件的文件就不依赖于类的定义。这减少了文件之间的依赖关系。只需要进行前向声明的一个示例是,如果一个类包含一个成员变量,该成员变量是指向类的指针而不是类本身。

在第一段中,我的意思是头文件中包含的不同.h文件和相应的cpp文件。我想知道是否可以将所有这些不同的.h文件都包含在头文件中。 - lordlabakdas
在第二段中,包含的类实际上是在其他地方声明和定义的另一个类。我想知道仅包括ClassName.h是否足够,而不是在头文件中调用class ClassName; - lordlabakdas
它们可以全部包含在头文件中,但这会不必要地增加编译时间,并且对于每个使用您的头文件的人都会带来一堆依赖项。因此,在头文件中尽可能使用前向声明(如class ClassName;),并仅在需要时在源文件中包含完整的头文件,这样更好。 - Cody Gray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接