- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我们已经从1.5节了解到,一般类定义都会放入头文件(header file)。在本节中我们将看到怎样为Sales_item类定义头文件。
事实上,C++程序使用头文件包含的不仅仅是类定义。回想一下,名字在使用前必须先声明或定义。到目前为止,我们编写的程序是把代码放到一个文件里来处理这个要求。只要每个实体位于使用它的代码之前,这个策略就有效。但是,很少有程序简单到可以放置在一个文件中。由多个文件组成的程序需要一种方法连接名字的使用和声明,在C++中这是通过头文件实现的。
为了允许把程序分成独立的逻辑块,C++支持所谓的分离编译(separate compilation)。这使得可由多个文件组建程序。为了支持分离编译,我们把Sales_item的定义放在一个头文件里面。我们后面在7.7节中定义的Sales_item成员函数将放在单独的源文件中。像main这样使用Sales_item对象的函数放在其他的源文件中,任何使用Sales_item的源文件都必须包含Sales_item.h头文件。
2.9.1? 设计自己的头文件
头文件为相关声明提供了集中场所。头文件一般包含类的定义、extern变量的声明和函数的声明。函数的声明将在7.4节介绍。使用或定义这些实体的文件要包含适当的头文件。
头文件的正确使用能够带来两个好处:保证所有文件使用给定实体的同一声明;当声明需要修改时,只有头文件需要更新。
设计头文件还须注意以下几点:头文件中的声明在逻辑上应该是统一的。编译头文件需要一定的时间。如果头文件太大,程序员可能不愿意承受包含该头文件所带来的编译时代价。
?
为了减少处理头文件的编译时间,有些C++的实现支持预编译头文件。欲进一步了解详细情况,请参考你的c++实现的手册。
编译和链接多个源文件?????????????????????????????????????????????????????????????????????
要产生可执行文件,我们不但要告诉编译器到哪里去查找main函数,而且还要告诉编译器到哪里去查找Sales_item类所定义的成员函数的定义。假设我们有两个文件:main.cc含有main函数的定义,Sales_item.cc含有Sales_item的成员函数。我们可以按以下方式编译这两个文件:
$ CC -c main.cc Sales_item.cc # by default generates a.exe
????????????????????????????????? ??# some compilers generate a.out
?
???? # puts the executable in main.exe
???? $ CC -c main.cc Sales_item.cc -o main
其中$是我们的系统提示符,#开始命令行注释。现在我们可以运行可执行文件,它将运行我们的main程序。
如果我们只是修改了一个.cc源文件,较有效的方法是只重新编译修改过的文件。大多数编译器都提供了分离编译每一个文件的方法。通常这个过程产生.o文件,.o扩展名暗示该文件含有目标代码。
编译器允许我们把目标文件链接在一起以形成可执行文件。我们所使用的系统可以通过命令名CC调用编译。因此可以按以下方式编译程序:
$ CC -c main.cc?????????? ? # generates main.o
$ CC -c Sales_item.cc??? ? # generates Sales_item.o
$ CC main.o Sales_item.o?? # by default generates a.exe;
???????????????????????????? ? # some compilers generate a.out
?
# puts the executable in main.exe
$ CC main.o Sales_item.o -o main
你将需要检查你的编译器的用户手册,了解如何编译和执行由多个源文件组成的程序。
??
?
许多编译器提供了增强其错误检测能力的可选功能。检视你的编译器的用户指???????????? 南,看有哪些额外的检测方法。
1. 头文件用于声明而不是用于定义
当设计头文件时,记住定义和声明的区别是很重要的。定义只可以出现一次,而声明则可以出现多次(2.3.5节)。下列语句是一些定义,所以不应该放在头文件里:
extern int ival = 10;???? // initializer, so its a definition
double fica_rate;???? ?????? // no extern, so its a definitio
文档评论(0)