- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++的头文件和实现文件分别写什么(DOC可编).doc
在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。
对于以C起步,C#作为“母语”的我刚开始跟着导师学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package理解以及.h文件和.cpp文件的总是心存纠结。
幸好导师有详细的PPT让我了解,一次对于Package的认识就明白多了。简单讲,一个Package就是由同名的.h和.cpp文件组成。当然可以少其中任意一个文件:只有.h文件的Package可以是接口或模板(template)的定义;只有.cpp文件的Package可以是一个程序的入口。
当然更具体详细的讲解,欢迎下载导师的教学PPT-Package来了解更多。
不过我在这里想讲的还是关于.h文件和.cpp文件
知道Package只是相对比较宏观的理解:我们在项目中以Package为编辑对象来扩展和修正我们的程序。编写代码时具体到应该把什么放到.h文件,又该什么放在.cpp文件中,我又迷惑了。
虽然Google给了我很多的链接,但是大部分的解释都太笼统了:申明写在.h文件,定义实现写在.cpp文件。这个解释没有差错,但是真正下手起来,又会发现不知道该把代码往哪里打。
于是我又把这个问题抛给了导师,他很耐心地给我详详细细地表述了如何在C++中进行代码分离。 很可惜,第一次我听下了,但是没有听太懂,而且本来对C++就了解不深,所以也没有深刻的印象。
经过几个项目的试炼和体验之后,我又拿出这个问题问导师,他又一次耐心地给我讲解了一遍(我发誓他绝对不是忘记了我曾经问过同样的问题),这次我把它记录了下来。
为了不再忘记,我将它们总结在这里。
概览
? 非模板类型(none-template) 模板类型(template) 头文件(.h) 全局变量申明(带extern限定符)
全局函数的申明
带inline限定符的全局函数的定义 带inline限定符的全局模板函数的申明和定义 类的定义
类函数成员和数据成员的申明(在类内部)
类定义内的函数定义(相当于inline)
带static const限定符的数据成员在类内部的初始化
带inline限定符的类定义外的函数定义 模板类的定义
模板类成员的申明和定义(定义可以放在类内或者类外,类外不需要写inline) 实现文件(.cpp) 全局变量的定义(及初始化)
全局函数的定义 (无) 类函数成员的定义
类带static限定符的数据成员的初始化 *申明:declaration*定义:definition
头文件
头文件的所有内容,都必须包含在
#ifndef {Filename} #define {Filename} //{Content of head file} #endif
这样才能保证头文件被多个其他文件引用(include)时,内部的数据不会被多次定义而造成错误
inline限定符
在头文件中,可以对函数用inline限定符来告知编译器,这段函数非常的简单,可以直接嵌入到调用定义之处。
当然inline的函数并不一定会被编译器作为inline来实现,如果函数过于复杂,编译器也会拒绝inline。
因此简单说来,代码最好短到只有3-5行的才作为inline。有循环,分支,递归的函数都不要用做inline。
对于在类定义内定义实现的函数,编译器自动当做有inline请求(也是不一定inline的)。因此在下边,我把带有inline限定符的函数成员和写在类定义体内的函数成员统称为“要inline的函数成员”
非模板类型
全局类型
就像前面笼统的话讲的:申明写在.h文件。
对于函数来讲,没有实现体的函数,就相当于是申明;而对于数据类型(包括基本类型和自定义类型)来说,其申明就需要用extern来修饰。
然后在.cpp文件里定义、实现或初始化这些全局函数和全局变量。
不过导师一直反复强调:不许使用全局函数和全局变量。用了之后造成的后果,目前就是交上去的作业项目会扣分。当然不能用自有不能用的理由以及解决方案,不过不在目前的讨论范围内。
自定义类型
对于自定义类型,包括类(class)和结构体(struct),它们的定义都是放在.h文件中。其成员的申明和定义就比较复杂了,不过看上边的表格,还是比较清晰的。
函数成员
函数成员无论是否带有static限定符,其申明都放在.h文件的类定义内部。
对于要
您可能关注的文档
- Beyond张粤语专辑APE系列下载(DOC可编).doc
- be型虚拟式.ppt
- BF(北京市道路货物运输合同(DOC可编).doc
- Bfaxbao电力工程造价专业资格认证考试大纲(DOC可编).doc
- BF音频生命探测仪操作手册(DOC可编).doc
- bgltuc机_动车驾驶人科目一考试题库(汽车类(DOC可编).doc
- BIEMS专业相关性评定作业指导书(DOC可编).doc
- bigbang让我听到你的声音(DOC可编).doc
- BIOS界面(DOC可编).doc
- BIRADS分级.ppt
- 河北 2023年真题模拟考试:国际市场营销学真题模拟汇编(共150题).pdf
- 安徽省2024年合格性高考招生计划.pdf
- 四川省眉山市成考专升本2023年大学语文预测卷(附答案).pdf
- 唐山市迁安市2022-2023学年数学四年级第二学期期末经典试题含解析.pdf
- 四川省遂宁市三年级下册数学专项复习卷(七):解决问题.pdf
- 安徽省安庆市宿松县2022-2023学年数学三下期末检测试题含解析.pdf
- 湖南省常德市汉寿县2022-2023学年一年级下学期数学期末考试试卷.pdf
- 大学实验室安全知识考试题库100题(含答案)AJK.pdf
- 奉化市六年级下册数学期末测试卷(全国通用).pdf
- 实用法律基础复习题.pdf
文档评论(0)