头文件应用问题

来源:3-3 归并排序法的优化

幕布斯3093750

2017-07-29

老师您好,我想问一下为什么你在程序中总是把一下源代码放入头文件处理,这样有什么好处吗,还是说必须这样处理

写回答

2回答

慕粉1657409443

2017-07-29

不是必须的,只是写些小程序方便一点吧!

可以将源代码放在一个文件中,但是为了实现模块化的编程,一般分作多个文件。直接将函数实现写在一个  h文件中,就可以不用写对应的 .cpp 文件了,你甚至可以将代码写在 .cpp文件中,直接include进来也是可以的。

将函数的实现直接放在h文件中,并不是标准的做法。这样做的话,预处理的时候,将include了的头文件内容直接拷贝到同一个文件中,再一起进行编译汇编。也就是说所有的代码都会被重新编译一遍。

一般的做法是,将函数实现放在 .cpp文件中,再在对应的h文件中描述这个cpp文件中实现了什么(函数声明等),需要调用的时候直接包含该.h文件就可以了,单独编译cpp文件,之后使用链接程序进行链接生成可执行程序。


2
1
liuyubobobo
感谢你的解答:)
2017-07-30
共1条回复

liuyubobobo

2017-07-30

首先,不是必须的。C++标准的OO实现是声明放在h文件中,实现放在cpp文件中。不过,因为在这个课程中,大量使用了模板函数和模板类,在现行的C++标准中,将模板类的实现和声明分开存在一些问题,虽然有解决方案,但相对比较tricky。为了不在课程中引入过多的C++语言的问题,我就直接将所有的实现放在h文件中了。关于模板类的实现和生命的分离,可以参考这里:https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file


另一方面,在工程编译后,cpp文件将编译成二进制文件,而h文件保持不变。因为一般意义上,h文件只是声明“有什么”,而cpp文件才具体声明“怎样做”。但是将“怎样做”放在“有什么”的h文件中,也是一种比较古老的开源工程的方式。当然,现在有了诸如github这样的工具,开源已经可以不借助这样的方式了。但是你也可以理解成我们在写一个个的开源工程:)


当然,如 @慕粉1657409443 所说,将实现放在h文件中的代价是编译时间变长。在大的工程项目中,这将非常明显。不过鉴于我们的课程中的工程都太小了,所以为了方便起见,我忽视了这个缺点,直接将实现写在h文件中了:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程