第7节 组织程序结构的相关技术.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 组织程序结构的相关技术 7.1 宏定义与条件编译 C和C++中允许使用相当数量的以#开头的预处理器指令,包括最常见的宏定义和#include指令。这些指令不是C++语句,在源程序被真正编译之前,由一个预处理器将其替换成标准C++程序,故称为预处理(器)指令或命令。 7.1.1 宏定义 例如: #define _STRING_H //用于条件编译目的是说明常量_STRING_H是否曾经被定义过; #define True 1 #define abs(x) ((x)0?(x):-(x)) 这种替换中不会发生任何计算行为。因为宏定义中没有类型检查,目前的第二、三种宏定义已基本被const常量和inline函数取代。 7.1.2 条件编译 条件编译指令使预处理器能够有选择地取舍参加编译的代码,是为了提高程序的可移植性而设置的指令。 #ifdef 宏名 statements_1 [#else statements_2] #endif 其中含义:如果已定义了宏,保留语句组statements_1部分参加编译,否则语句组statements_2部分参加编译(如果有#else部分)。 条件编译指令会出现在每一个C或C++头文件中。 7.2 头文件包含 可以用一条指令代替大量的重复代码,减轻了重复声明的负担。 例如,如果两个程序文件中都使用了函数print或类A,那么,每个文件中都需要插入函数的声明和类的定义。 可以利用头文件将函数声明、类型定义等集中起来,再以头文件包含指令插在程序开头。 7.2.1 头文件包含指令 头文件包含指令有如下两种格式: #include 文件名   #include iostream #include “文件名”    #include d:\user\x.h 两种格式区别: 第一种格式一般用于包含系统头文件,主要在系统目录中查找文件,速度较快, 第二种格式用于用户自定义头文件。主要在更多的目录下查找,如程序文件所在的目录等,因此会消耗更多的查找时间。 在预处理时,系统将用查找到的文件内容替换掉文件包含指令。 7.2.2 新旧库头文件 标准C++已经将这些内容重新在std名字空间中做了定义。 C的头文件:应在原来的C头文件前加“c”, 如#include cstdio; 旧版C++头文件:文件名带“.h”, 如#include iostream.h; 标准库C++头文件:文件名不带“.h”, 如#include iostream。 事实上,#include stdio.h形式的文件包含虽然可用,但此时使用的C函数没有包装在std名字空间里。 7.2.3 类定义与实现的分离 类定义与实现部分通常总是分离的 类的定义构成.h文件,类的实现形成.cpp文件。 为了使用类的定义,.h文件必须对使用者公开,这样,类的程序文件中采用文件包含指令包含头文件,而.cpp文件一般编译成机器代码,使源程序代码得到了保护。 与商业性相关的类定义及其实现构成了类库 主要的C++类库包括微软公司的MFC和Borland公司的OWL,分别集成在他们自己的C++产品中,为软件开发工作提供支持。 7.2.4 头文件中的内容 头文件中的基本内容是“声明”,可以包含如下的内容: 7.2.5 一个头文件示例 条件编译的作用是使得第二次包含此头文件时,所有内容不再参加编译. 7.3 对象的构造与析构次序 局部的自动对象在程序流程离开所在块时被拆除。 外部对象和静态对象在程序运行结束时被拆除。 动态对象在用delete释放或程序运行结束时被拆除。 对象的拆除次序总是与构造次序相反的,即最先构造的对象最后拆除,包括并列、有继承关系和一个对象是另一个对象的成员等所有情况。 7.4 名字冲突、屏蔽与名字空间 在C++中有多种作用域。 在同一作用域内,数据名(常量和变量)和函数名属于一类,彼此不能重复,类型名(使用class、struct、union和enum定义)属于另一类,彼此也不能重复。 但不同种类的名字可以相同(如变量名和类型名可相同),不同作用域内的名字也可以相同。 7.4.1 名字冲突及对策 1 局部名对外部名的屏蔽作用 2 数据名和函数名冲突 在内部数据或函数名屏蔽了外部类型名时,应使用类型名的全名(带class、struct、union或enum关键字)来表示类型名; 在局部定义的类型名屏蔽了外部数据或函数名时,以域解析符“::”进行区分。 7.4.2 定义和使用名字空间 1 名字空间的定义 同一种类的名字在其中必须唯一的作用域称为名字空间。 此部分内容要求学生自学。 2 使用名字空间中的定义 此部分内容要求学生自学。 7.5 C++与C的混合编程 对用于C++的C语言代码要做适当处理,

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档