为何C ++具备头文件和.cpp文件? 函数
这是声明接口的预处理器方式。 您将接口(方法声明)放入头文件中,并将实现放入cpp中。 使用您的库的应用程序只须要知道接口,就能够经过#include访问该接口。 spa
由于在C ++中,最终的可执行代码不包含任何符号信息,因此它或多或少是纯机器代码。 设计
所以,您须要一种描述一段代码界面的方法,该方法与代码自己是分开的。 该描述在头文件中。 接口
好吧,主要缘由是要从实现中分离接口。 标头声明一个类(或正在实现的任何东西)将作什么,而cpp文件定义了它将如何执行那些功能。 get
这减小了依赖性,所以使用标头的代码不必定须要了解实现的全部细节以及仅为此所需的任何其余类/标头。 当实现中的某些内容发生更改时,这将减小编译时间,并减小所需的从新编译量。 编译器
它不是完美的,一般您会使用Pimpl Idiom之类的技术来正确分离接口和实现,但这是一个好的开始。 io
由于设计库格式的人不但愿“浪费”一些不多使用的信息,例如C预处理器宏和函数声明。 编译
因为您须要该信息来告诉编译器“连接器完成其工做后,此功能才可用”,所以他们不得不拿出另外一个文件来存储此共享信息。 class
C / C ++以后的大多数语言都将此信息存储在输出中(例如Java字节码),或者根本不使用预编译格式,老是以源代码形式分发并即时编译(Python,Perl)。 扩展
一般,您将须要定义接口而没必要交付整个代码。 例如,若是您有一个共享库,则将附带一个头文件,该头文件定义了共享库中使用的全部功能和符号。 若是没有头文件,则须要发送源代码。
在单个项目中,至少将IMHO头文件用于两个目的: