按照目前的情况,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。 如果您认为此问题可以解决并且可以重新提出,
请访问帮助中心以获取指导。
7年前关闭。
为什么C ++具有头文件和.cpp文件?
#1楼
这是声明接口的预处理器方式。 您将接口(方法声明)放入头文件中,并将实现放入cpp中。 使用您的库的应用程序只需要知道接口,就可以通过#include访问该接口。
#2楼
因为在C ++中,最终的可执行代码不包含任何符号信息,所以它或多或少是纯机器代码。
因此,您需要一种描述一段代码界面的方法,该方法与代码本身是分开的。 该描述在头文件中。
#3楼
好吧,主要原因是要从实现中分离接口。 标头声明一个类(或正在实现的任何东西)将做什么,而cpp文件定义了它将如何执行那些功能。
这减少了依赖性,因此使用标头的代码不一定需要了解实现的所有细节以及仅为此所需的任何其他类/标头。 当实现中的某些内容发生更改时,这将减少编译时间,并减少所需的重新编译量。
它不是完美的,通常您会使用Pimpl Idiom之类的技术来正确分离接口和实现,但这是一个好的开始。
#4楼
因为设计库格式的人不希望“浪费”一些很少使用的信息,例如C预处理器宏和函数声明。
由于您需要该信息来告诉编译器“链接器完成其工作后,此功能才可用”,因此他们不得不拿出另一个文件来存储此共享信息。
C / C ++之后的大多数语言都将此信息存储在输出中(例如Java字节码),或者根本不使用预编译格式,总是以源代码形式分发并即时编译(Python,Perl)。
#5楼
通常,您将需要定义接口而不必交付整个代码。 例如,如果您有一个共享库,则将附带一个头文件,该头文件定义了共享库中使用的所有功能和符号。 如果没有头文件,则需要发送源代码。
在单个项目中,至少将IMHO头文件用于两个目的:
明确性,即通过将接口与实现分开,可以更轻松地读取代码
编译时间。 通过在可能的情况下仅使用接口,而不是完整的实现,可以减少编译时间,因为编译器可以简单地引用该接口,而不必解析实际的代码(理想情况下,只需完成此操作即可)一次)。