为何有头文件和.cpp文件? [关闭]

按照目前的状况,这个问题不适合咱们的问答形式。 咱们但愿答案获得事实,参考或专业知识的支持,可是这个问题可能会引发辩论,争论,民意调查或扩展讨论。 若是您认为此问题能够解决而且能够从新提出, 请访问帮助中心以获取指导。
7年前关闭。

为何C ++具备头文件和.cpp文件? 函数


#1楼

这是声明接口的预处理器方式。 您将接口(方法声明)放入头文件中,并将实现放入cpp中。 使用您的库的应用程序只须要知道接口,就能够经过#include访问该接口。 spa


#2楼

由于在C ++中,最终的可执行代码不包含任何符号信息,因此它或多或少是纯机器代码。 设计

所以,您须要一种描述一段代码界面的方法,该方法与代码自己是分开的。 该描述在头文件中。 接口


#3楼

好吧,主要缘由是要从实现中分离接口。 标头声明一个类(或正在实现的任何东西)将作什么,而cpp文件定义了它将如何执行那些功能。 get

这减小了依赖性,所以使用标头的代码不必定须要了解实现的全部细节以及仅为此所需的任何其余类/标头。 当实现中的某些内容发生更改时,这将减小编译时间,并减小所需的从新编译量。 编译器

它不是完美的,一般您会使用Pimpl Idiom之类的技术来正确分离接口和实现,但这是一个好的开始。 io


#4楼

由于设计库格式的人不但愿“浪费”一些不多使用的信息,例如C预处理器宏和函数声明。 编译

因为您须要该信息来告诉编译器“连接器完成其工做后,此功能才可用”,所以他们不得不拿出另外一个文件来存储此共享信息。 class

C / C ++以后的大多数语言都将此信息存储在输出中(例如Java字节码),或者根本不使用预编译格式,老是以源代码形式分发并即时编译(Python,Perl)。 扩展


#5楼

一般,您将须要定义接口而没必要交付整个代码。 例如,若是您有一个共享库,则将附带一个头文件,该头文件定义了共享库中使用的全部功能和符号。 若是没有头文件,则须要发送源代码。

在单个项目中,至少将IMHO头文件用于两个目的:

  • 明确性,即经过将接口与实现分开,能够更轻松地读取代码
  • 编译时间。 经过在可能的状况下仅使用接口,而不是完整的实现,能够减小编译时间,由于编译器能够简单地引用该接口,而没必要解析实际的代码(理想状况下,只需完成此操做便可)一次)。
相关文章
相关标签/搜索