电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C++多文件程序结构构成及编译程序

5页
  • 卖家[上传人]:人***
  • 文档编号:484950575
  • 上传时间:2023-07-06
  • 文档格式:DOC
  • 文档大小:22.51KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、一.C+程序的多文件结构比较完整的C+程序它们的结构基本上可以分为三个部分:类的声明、类的成员函数的实现和主函数。因为代码比较少,所以可以把它们写在一个文件中,但是实际进行软件开发时,程序会比较复杂,代码量比较大,一个程序按结构至少可以划分为三个文件:类的声明文件(*.h文件)、类的实现文件(*.cpp文件)和主函数文件(使用到类的文件),如果程序更复杂,我们会为每个类单独建一个声明文件和一个实现文件。这样我们要修改某个类时就直接找到它的文件修改即可,不需要其他的文件改动。以生存期的时钟类的例子,按照上面说的结构分到三个文件里:/ 文件1:Clock类的声明,可以起名为Clock.h#include using namespace std;class Clock /时钟类声明public: /外部接口Clock();void SetTime(int NewH, int NewM, int NewS);/三个形参均具有函数原型作用域void ShowTime();Clock()private: /私有数据成员int Hour,Minute,Second;/ 文件2:Clock类的实现,可

      2、以起名为Clock.cpp#include Clock.h/时钟类成员函数实现Clock:Clock() /构造函数Hour=0;Minute=0;Second=0;void Clock:SetTime(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:ShowTime()coutHour:Minute:Secondendl;/ 文件3:主函数,可以起名为main.cpp#include Clock.h/声明全局对象g_Clock,具有文件作用域,静态生存期Clock g_Clock;int main() /主函数cout文件作用域的时钟类对象:endl;/引用具有文件作用域的对象:g_Clock.ShowTime();g_Clock.SetTime(10,20,30);Clock myClock(g_Clock);/声明具有块作用域的对象myClock,并通过默认拷贝构造函数用g_Clock初始化myClockcout块作用域的时钟类对象:Add Class,在弹出的对话框中选择c+ cla

      3、ss,然后由弹出个对话框,在class name处填上类名点finish就可以了,这样.h文件和.cpp文件会自动生成,我们也可以点Project-Add New Item,在弹出的对话框中选择Header File(.h)或C+ File(.cpp)来生成.h文件或.cpp文件。Clock.cpp和main.cpp都使用#include Clock.h把类Clock的头文件Clock.h包含进来。#include指令的作用就是将#include后面的文件嵌入到当前源文件该点处,被嵌入的文件可以是.h文件也可以是.cpp文件。如果不包含Clock.h,Clock.cpp和main.cpp就不知道Clock类的声明形式,就无法使用此类,所以所有使用此类的文件都应该包含声明它的头文件。关于#include指令下面鸡啄米会讲。上面的程序在编译时,由Clock.cpp和Clock.h编译生成Clock.obj,由main.cpp和Clock.h编译生成main.obj,然后就是链接过程,Clock.obj和main.obj链接生成main.exe可执行文件。如果我们只修改了类的实现文件,那么只

      4、需重新编译Clock.cpp并链接就可以,别的文件不用管,这样就提高了效率。在Windows系统中的C+程序用工程来管理多文件结构,而Unix系统一般用make工具管理,如果大家从事Unix系统软件开发,就需要自己写make文件。二.编译预处理程序编译器在编译源程序以前,要由预处理程序对源程序文件进行预处理。预处理程序提供了一些编译预处理指令和预处理操作符。预处理指令都要由“#”开头,每个预处理指令必须单独占一行,而且不能用分号结束,可以出现在程序文件中的任何位置。1.#include指令#include指令也叫文件包含指令,用来将另一个源文件的内容嵌入到当前源文件该点处。其实我们一般就用此指令来包含头文件。#include指令有两种写法:#include 使用这种写法时,会在C+安装目录的include子目录下寻找中标明的文件,通常叫做按标准方式搜索。#include 文件名使用这种写法时,会先在当前目录也就是当前工程的目录中寻找中标明的文件,若没有找到,则按标准方式搜索。2.#define和#undef指令如果你学过C语言,就会知道用#define可以定义符号常量,比如,#defi

      5、ne PI 3.14 这条指令定义了一个符号常量PI,它的值是3.14。C+也可以这样定义符号常量,但一般更常用的是在声明时用const关键字修饰。C语言还用#define定义参数宏,来实现简单的函数运算,比如,#define add(x,y) (x+y) 这条指令说明如果我们用到add(1,2)则预处理后就会用(1+2)代替,C+中一般用内联函数来实现。#undef用来删除由#define定义的宏,使其不再起作用。3.条件编译指令用条件编译指令可以实现某些代码在满足一定条件时才会参与编译,这样我们可以利用条件编译指令将同一个程序在不同的编译条件下生成不同的目标代码。例如,我们可以在调试程序时加入一些调试语句,用条件编译指令控制只有在debug模式下这些调试语句才参与编译,而在release模式下不参与编译。条件编译指令有5中形式:a.第一种形式:#if常量表达式程序正文/当“ 常量表达式”非零时本程序段参与编译#endifb.第二种形式:#if常量表达式程序正文1/当“ 常量表达式”非零时本程序段参与编译#else程序正文2/当“ 常量表达式”为零时本程序段参与编译#endifc.第

      6、三种形式:#if 常量表达式1程序正文1/当“ 常量表达式1”非零时本程序段参与编译elif 常量表达式2程序正文2/当“常量表达式1”为零、“ 常量表达式2”非零时本程序段参与编译.elif 常量表达式n程序正文n/当“常量表达式1”、.、“常量表达式n-1”均为零、“ 常量表达式n”非零时本程序段参与编译#else程序正文n+1/其他情况下本程序段参与编译#endifd.第四种形式:#ifdef 标识符程序段1#else程序段2#endif如果“标识符”经#defined定义过,且未经undef删除,则编译程序段1,否则编译程序段2。e.第五种形式:#ifndef 标识符程序段1#else程序段2#endif如果“标识符”未被定义过,则编译程序段1,否则编译程序段2。4.define操作符define是预处理操作符,不是指令,所以不能用#开头。使用形式为:define(标识符)。如果括号里的标识符用#define定义过,并且没有用#undef删除,则define(标识符)为非0,否则为0。可以这样使用:#if !define(HEAD_H)#define HEAD_H我们在包含头文件时,有时多次重复包含同一个头文件,比如下面这种情况:/ main.cpp文件#include file1.h#include file2.hint main()/ file1.h文件#include head.h/ file2.h文件#include head.h/ head.h文件.class A.main.cpp包含了file1.h文件,file1.h又包含了head.h文件,main.cpp还包含了file2.h文件,file2.h也包含了head.h文件,那么mai

      《C++多文件程序结构构成及编译程序》由会员人***分享,可在线阅读,更多相关《C++多文件程序结构构成及编译程序》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.