2.9(编写自己文件头).docVIP

  • 0
  • 0
  • 约1.04万字
  • 约 15页
  • 2017-07-29 发布于湖北
  • 举报
我们已经从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)

1亿VIP精品文档

相关文档