在C++中,允许在多个源文件中拆分同一头文件中定义的类的定义吗?例如,如果我有一个定义了Quad2和Quad3类的文件,我可以将Quad2类定义在名为Quad2.cpp的文件中,将Quad3类定义在名为Quad3.cpp的文件中,但仍然在同一头文件Quad.h中保留两个类吗?
这样做是否被认为是不合法的?
这样做是否被认为是不合法的?
是的,完全合法。实际上,如果您想将代码拆分为更小的文件,您可以拥有Quad2A.cpp和Quad2B.cpp(当然,这样做可能没有任何好处)。
但是,将源代码分离的一个缺点是使编译器更难内联那些小型函数[或仅使用一次的函数]。大多数编译器只会内联同一编译单元中的函数。因此,如果Quad3.cpp正在使用Quad2.cpp中的某些内容,则在它们在同一文件中时可能会被内联,但如果它们在不同的文件中,则不会被内联。不过,这不应该是设计的决定因素 - 只是提到“让我们拆分这个”的副作用之一。
#include <some_header.h>
就像将头文件的完整内容复制到该位置的源文件中。如果您将Quad2.h
和Quad3.h
包含在两个源文件Quad2.cpp
和Quad3.cpp
中,则这将产生完全相同的效果,就好像您将两个头文件放入一个Quad.h
文件中并在cpp
文件中代替它们。使用头文件和实现文件对的方法只是一种惯例(而且是一个好习惯)。只需尝试并亲自体验!但不,这不是非法的。一个更少让人困惑的方法(在我看来)是拥有Quad2.h和.cpp、Quad3.h和.cpp,并在Quad.h中包含Quad2.h和Quad3.h以方便使用。
没有强制要求你这样做,但尽量保持X.h与X.cpp相关联的模式,这是常见做法。