头文件应用问题
来源:3-3 归并排序法的优化
幕布斯3093750
2017-07-29
老师您好,我想问一下为什么你在程序中总是把一下源代码放入头文件处理,这样有什么好处吗,还是说必须这样处理
2回答
-
慕粉1657409443
2017-07-29
不是必须的,只是写些小程序方便一点吧!
可以将源代码放在一个文件中,但是为了实现模块化的编程,一般分作多个文件。直接将函数实现写在一个 h文件中,就可以不用写对应的 .cpp 文件了,你甚至可以将代码写在 .cpp文件中,直接include进来也是可以的。
将函数的实现直接放在h文件中,并不是标准的做法。这样做的话,预处理的时候,将include了的头文件内容直接拷贝到同一个文件中,再一起进行编译汇编。也就是说所有的代码都会被重新编译一遍。
一般的做法是,将函数实现放在 .cpp文件中,再在对应的h文件中描述这个cpp文件中实现了什么(函数声明等),需要调用的时候直接包含该.h文件就可以了,单独编译cpp文件,之后使用链接程序进行链接生成可执行程序。
212017-07-30 -
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文件中了:)
00
相似问题