| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5794 人关注过本帖
标题:.cpp与.h区别和作用小谈,对新手有所帮助
只看楼主 加入收藏
mr生如夏花
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
.cpp与.h区别和作用小谈,对新手有所帮助
刚刚在其他地方一个看到关于文件.cpp和文件.h的区别和作用,在这里和大家分享一下,对新手可能有所帮助。

 
.cpp与.h

      把文件分成头文件和源文件完全是为了方便我们扩展和组织程序 ,我们可能会自定义很多函数 ,而这些函数分别会在不同的地方被调用 ,甚至有些时候我们需要把一堆函数打包起来一起调用 。比如#include "stdio.h" 的意思就是告诉系统 ,我要用输入输出函数包(确切的讲,stdio.h就像是一个程序包一样,里面打包了各种各样的输入输出函数,stdio里的io就是in out的意思) 。
      说说具体的吧 ,为了方便函数可以独立的被任何地方调用 ,我们会把每一个函数的定义代码都写成一个cpp ,这个叫做函数的代码文件, 并且此cpp的文件名以此函数名来命名。同时,我们会建立一个文件名相同的头文件(即.h),并在该头文件里写上此函数的函数声明(如 void a();等等)。别看头文件里只写了简单的一句 ,但却很有用 ,如果某个函数里需要调用我们刚才定义的那个函数的时候之需要在代码里加上一句#include "xxxx.h"就可以了(xxxx就是刚才我们自己建立的那个头文件)。
      这样说好像还是体现不出这种发的优势 ,那么看看头文件的另一种用法 ,假如我们现在要开发一个视频编辑软件 ,那么里面必然要定义很多很多函数, 有关于图像处理的 ,关于音频处理的 。等等等等 ,在没有头文件的情况下, 如果我们的main()函数里需要调用关于图像处理的很多函数, 那么我们就得在调用语句的前面一个一个的对所用到的函数进行声明(否则系统就会报错 说你的函数没有定义), 而用了头文件就方便多了 我们只需要建立一个tuxiang.h 并在里面写上所有的关于图像处理的函数的声明(相当于我们建立了一个图像函数包)。这样,当任何一个函数想要调用关于图像处理的函数时 ,无需任何声明 ,只需在代码前加上一句#include "tuxiang.h"就可以了,这样就避免了每一个cpp里调用图像函数包都得写一大堆声明 。




搜索更多相关主题的帖子: 源文件 include 
2012-10-27 01:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
接近对,但不全对。

授人以渔,不授人以鱼。
2012-10-27 02:23
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:0 
值得学习

马马虎虎 不吝赐教 我是路过蹭分滴
2012-10-27 09:37
mr生如夏花
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-14
收藏
得分:0 
回复 2楼 TonyDeng
多谢指点
2012-10-31 23:50
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
收藏
得分:0 
回复 2楼 TonyDeng
版主劳驾,能否告知哪里有问题?认真请教
2012-11-01 09:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 5楼 核晴核理
头.h文件的使用,并非纯粹是为了分类管理代码,而是C/C++语言本身对声明的要求。C/C++程序往往需要很多全局性的声明,比如数据结构、常量和函数,特别是函数,因为C语言没有函数中嵌套函数的语法,所以任何函数都是全局性的,至少也是模块级别的。当程序由多个模块构成的时候,对同一个函数,即使多个模块都调用这个函数,链接器也只需要一份该函数的实现代码,不需要每个模块都重复该代码,但实际上又不是每个模块都使用全部所有的函数,总是各有所需,不过偶有交叉而已,这个时候,C语言就规定调用者只要事先声明需要使用某个函数,那么编译器就视此函数在这个模块中可见,若不声明,即不可见,这是代码隐藏思想的原始技术(C++用类封装来解决这个问题)。

因此,比如malloc()函数,你有甲乙丙三个模块,只有甲和乙模块使用到malloc()函数,丙不需要,那么你就在甲和乙模块前写上malloc()函数的原型,表示将会使用这个函数,那么编译器就会到.LIB代码库中检索出实现代码,链接到程序的可执行文件中,而假如丙模块没有这样的声明,但实际上又用到了malloc()函数,那么编译器就会发出警告,说你的代码没有声明就使用函数,到底是怎么回事。

事实上,你完全可以在丙模块中编写一个也命名为malloc()的函数,覆盖掉语言库中提供的函数,与甲、乙的malloc()函数是同名但不同质,甚至三个模块分别有三个不同版本的malloc()函数,都是可以的。这其实就是C++类的原始实现,每个模块相对独立为一个类。

假如很多模块都使用同样的某个函数,但在这些模块中反复书写这个函数的原型,也是比较烦人的,所以C语言使用一个叫.h的文件,把相关函数一次写好,使用到这些函数的模块,只要#include这个头,就等于把这些函数原型抄到模块中了。记住:#include预处理指令只是把相关文件的代码嵌入到当前模块。.h只是为了节省键入代码成本和书写不一致而使用的技巧概念,C#和Java都不使用.h头文件,C++只是为了兼容C而不得不继续支持,但实际上在C++程序中已经很少需要#include头文件了,多改用namespace命名空间替代。

在C/C++中,只要有两个函数的命名和参数列表完全一样,就被视为同一个函数的实现,链接器必定报错,不管你是否使用了.h文件。初学者常见的_main()函数重复被发现,就是这个原因,因为他写了多个模块都使用了相同的函数main(),那是完全一样的,不包括任何.h头也会报错。

授人以渔,不授人以鱼。
2012-11-01 16:28
快速回复:.cpp与.h区别和作用小谈,对新手有所帮助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028105 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved