C++面向对象程序设计课件第三章 C++程序的结构.ppt

上传人:m****u 文档编号:14506625 上传时间:2024-08-01 格式:PPT 页数:32 大小:249KB
下载 相关 举报
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第1页
第1页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第2页
第2页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第3页
第3页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第4页
第4页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第5页
第5页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第6页
第6页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第7页
第7页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第8页
第8页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第9页
第9页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第10页
第10页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第11页
第11页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第12页
第12页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第13页
第13页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第14页
第14页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第15页
第15页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第16页
第16页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第17页
第17页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第18页
第18页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第19页
第19页 / 共32页
C++面向对象程序设计课件第三章 C++程序的结构.ppt_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、18 十二月 2023C+面向对象程序设计第三章 C+程序的结构t3.1 作用域和可见性t3.2 生存期t3.3 变量的存储类型t3.4 编译预处理和多文件结构t项目设计2 预处理及多文件结构18 十二月 2023C+面向对象程序设计3.1 作用域和可见性t3.1.1 作用域t3.1.2 可见性18 十二月 2023C+面向对象程序设计3.1.1 作用域t作用域是标识符在程序中有效的范围l块作用域t当标识符的声明出现在由一对大括号所括起来的一段程序(块)内时,该标识符的作用域从声明点开始,到块结束的大括号处为止,该作用域的范围具有局部性。t例如,如下代码:void fun(int a)/a的作

2、用域起始处int b=1;/b的作用域起始处 18 十二月 2023C+面向对象程序设计3.1.1 作用域l函数原型作用域t函数原型作用域指的是在声明函数原型所指定的参数标识符的作用范围。if(ab)int c;/c的作用域起始处c=a-b;coutc;./c的作用域终止处 /a和b的作用域终止处18 十二月 2023C+面向对象程序设计3.1.1 作用域t这个作用范围是在函数原型声明中的左、右括号之间。l函数作用域t在C+语言中,只有goto语句中的标号标识符具有函数作用域。t由于goto语句的滥用导致程序流程无规则、可读性差。因此现代程序设计方法不主张使用goto语句。l文件作用域t文件作

3、用域是在所有函数定义之外声明的,其作用域从声明之处开始,直到文件结束。18 十二月 2023C+面向对象程序设计3.1.2 可见性t可见性是从对标识符的引用的角度来谈的概念。如果标识符在某处可见,则就可以在该处引用此标识符。程序运行到某一点能够引用到的标识符就是该处可见的标识符。t作用域指的是标识符有效的范围,而可见性是分析在某一位置标识符的有效性。18 十二月 2023C+面向对象程序设计3.1.2 可见性t作用域可见性的一般规则是:l标识符应声明在前,引用在后。l在同一作用域中,不能声明同名的标识符。l在没有互相包含关系的不同的作用域中声明的同名标识符互不影响。l对于两个嵌套的作用域,如果

4、在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。18 十二月 2023C+面向对象程序设计3.1.2 可见性t作用域与可见性实例:#include using namespace std;int i;/变量i具有文件作用域void main()i=5;/文件作用域的i赋初值 /子块1 int i;/变量i具有块作用域 i=7;couti=iendl;/输出7couti=iendl;/输出5 18 十二月 2023C+面向对象程序设计3.2 生存期t3.2.1 静态生存期t3.2.2 动态生存期18 十二月 2023C+面向对象程序设计3.2.1 静态生存期t静

5、态生存期与程序的运行期相同,只要程序一开始运行,这种生命期的变量就存在,当程序结束时,其生命期就结束。l具有静态生命期的变量在定义时就分配固定的存储单元,并一直保持不变,直至整个程序结束。l如果要在函数内部的块作用域中声明具有静态生存期的变量,则要使用关键字static,例如下列语句声明的变量i便是具有静态生存期的变量,也称为静态变量:static int i;l静态生命期的变量,若无显式初始化,则自动初始化为0。18 十二月 2023C+面向对象程序设计3.2.2 动态生存期t在块作用域中声明的变量具有动态生存期,也可称为局部生存期变量。这种变量的生存期开始于程序执行经过其声明点时,而结束于

6、其作用域结束处。l具有动态生存期的变量是在程序执行过程中,使用它的时候才分配存储单元,使用完毕就立即释放。18 十二月 2023C+面向对象程序设计3.2.2 动态生存期t变量的动态生存期与可见性例子#include using namespace std;int i=1;/i具有文件作用域和静态生存期void main(void)/a具有块作用域和静态生存期,局部可见。static int a;int b=-10;/b,c具有块作用域和动态生存期。int c=0;void other(void);cout-MAIN-n;cout i:i a:a b:b c:cendl;18 十二月 2023

7、C+面向对象程序设计3.2.2 动态生存期 c=c+8;other();cout-MAIN-n;cout i:i a:a b:b c:cendl;i=i+10;other();void other(void)static int a=2;static int b;/a,b具有块作用域和静态生存期,局部可见 /只在第一次进入函数时被初始化。18 十二月 2023C+面向对象程序设计3.2.2 动态生存期 int c=10;/C具有块作用域和动态生存期 /每次进入函数时都初始化。a=a+2;i=i+32;c=c+5;cout-OTHER-n;cout i:i a:a b:b c:cendl;b=a

8、;18 十二月 2023C+面向对象程序设计3.3 变量的存储类型t3.3.1 局部变量t3.3.2 全局变量t3.3.3 外部变量18 十二月 2023C+面向对象程序设计3.3.1 局部变量t具有块作用域的变量称为局部变量。t一般说来,用自动存储类型(auto)声明的变量都是限制在某个程序范围内使用的,即为局部变量。t使用关键字register声明寄存器类型的变量的目的是将所声明的变量放入寄存器内,从而加快程序的运行速度。t静态类型(static)变量也是一种局部变量。它和自动存储类型变量的最大不同之处在于:静态存储类型变量在内存中是以固定地址存放的,而不是以堆栈方式存放的。18 十二月

9、2023C+面向对象程序设计3.3.1 局部变量t在C+语言中,声明局部变量的时候加上关键字static就构成了静态局部变量。t局部变量实例参见教材 例 3-318 十二月 2023C+面向对象程序设计3.3.2 全局变量t具有文件作用域的变量称为全局变量。t在程序中声明的全局变量总是静态存储类型,若在全局变量前加上static,使该变量只在这个源程序文件内使用,称为全局静态存储变量或静态存储全局变量。t全局变量实例参见教材 例 3-418 十二月 2023C+面向对象程序设计3.3.3 外部变量 t使用关键字extern声明的变量称为外部变量。一般是指定义在本程序外部的变量。textern定

10、义符的作用是将全局变量的作用域延伸到其它源程序文件。t在C+中,只有在两种情况下要使用外部变量。l第一种情况是在同一个源程序文件中,若定义的变量使用在前,声明在后,这时在使用前要声明为外部变量。(参见教材例 3-5)l第二种情况,当由多个源文件组成一个完整的程序时,在一个源程序文件中完全定义的变量要被其他若干个源文件引用时,引用的文件中要使用extern声明外部变量。(参见教材例 3-6)18 十二月 2023C+面向对象程序设计3.4 编译预处理和多文件结构t3.4.1 编译预处理命令t3.4.2 多文件组织结构18 十二月 2023C+面向对象程序设计3.4.1 编译预处理命令t预处理程序

11、又称预处理器,它包含在编译器中。编译器在对源程序进行编译之前,首先要由预处理程序对程序文本进行预处理,把源代码转化成包含机器语言指令的目标文件。l宏定义指令#define和#undeft在程序中可用#define来定义一个符号常量,例如:#define PI 3.1415926t#define还可以定义带参数的宏,例如:#difine MIN(x,y)(x)(y)?(x):(y)18 十二月 2023C+面向对象程序设计3.4.1 编译预处理命令t#undef的作用是删除由#define定义的宏,使之不再起作用。l文件包含指令#includet所谓“文件包含”是指将另一个源文件嵌入到当前源文件

12、中该点处。t文件包含指令有两种格式:l#include t这种格式用于嵌入C+提供的头文件。这些头文件一般位于C+系统目录的include子目录下。l#include 文件名 t预处理器遇到这种格式的包含指令后,首先在当前文件所在目录中进行搜索,如果找不到,再按标准方式搜索。这种方式适合于规定用户自己建立的头文件。18 十二月 2023C+面向对象程序设计3.4.1 编译预处理命令l条件编译指令t一般情况下,源程序中所有的语句都参加编译,但有时也希望根据一定的条件去编译源文件的不同部分,这就是“条件编译”。tC+提供的条件编译语句有下列几种常用的形式:l#if形式#if /当表达式值为真(非零

13、)时编译程序段1#else/当表达式值为假(零)时编译程序段2#endif 18 十二月 2023C+面向对象程序设计3.4.1 编译预处理命令l#ifdef形式或#ifndef形式#ifdef(或#ifndef)#else#endif l#if-#elif形式#if/当表达式1值为真(非零)时编译程序段1#elif/当表达式1值为假、表达式2值为真时编译程序段2#elif /当表达式1、表达式n-1值均为假,表达式n值为真时编译程序段n#else /其他情况下编译程序段n-1#endif 18 十二月 2023C+面向对象程序设计3.4.1 编译预处理命令t编译预处理命令实例参见教材 例 3

14、-7 18 十二月 2023C+面向对象程序设计3.4.2 多文件组织结构t在实际的程序设计中,一个程序通常由多个头文件和源文件组成,每个源文件是一个可编译的程序单位,头文件起着源文件之间接口的作用。t从下面的程序开发示意图来看看多文件的组织结构:18 十二月 2023C+面向对象程序设计3.4.2 多文件组织结构18 十二月 2023C+面向对象程序设计3.4.2 多文件组织结构t图中,源文件中含有包含头文件的预编译语句,经过预编译后,产生翻译单元,然后编译,进行语法检查,产生目标文件(.obj)。若干个目标文件经过连接,产生可执行文件(.exe)。t多文件组织结构实例参见 例 3-8 18

15、 十二月 2023C+面向对象程序设计项目设计2 预处理及多文件结构t设计题目l预处理及多文件结构t设计概要l要求掌握多文件C+程序的编码方法和预处理的使用。t系统分析l书写头文件时应该遵循的几点规则:t为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。18 十二月 2023C+面向对象程序设计项目设计2 预处理及多文件结构t用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。t用#includee”filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。t头文件中只存放“声明”而不存放“定义”。在C

16、+语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将函数的定义与声明分开,不论该函数体有多么小。t不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。l定义文件主要也是由三部分组成:定义文件开头处的版权和版本声明、对一些头文件的引用和程序体的实现。18 十二月 2023C+面向对象程序设计项目设计2 预处理及多文件结构t功能模块设计 l在校园信息管理系统中,所有的功能模块都会分别封装起来,然后由用户操作界面部分程序,根据用户的选择,调用执行不同的功能。l用户操作界面部分程序代码,将存放在main.cpp中,所有程序中将使用到的头文件将统一放在main.h文件中。t完整程序代码参见教材项目设计218 十二月 2023C+面向对象程序设计项目设计2 预处理及多文件结构t总结 l本章项目设计主要从预处理及多文件结构入手,论述C+/C编程风格。难度不高,但是细节比较多。别小看这些内容,提高程序代码质量就是要从这些点点滴滴做起。世上不存在最好的编程风格,一切因需求而定。如果读者觉得

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学/培训 > 电大函授

copyright@ 2008-2021 八斗文库网站版权所有

经营许可证编号:湘ICP备2022012878号