《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构

上传人:E**** 文档编号:89399811 上传时间:2019-05-24 格式:PPT 页数:32 大小:389KB
返回 下载 相关 举报
《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构_第1页
第1页 / 共32页
《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构_第2页
第2页 / 共32页
《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构_第3页
第3页 / 共32页
《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构_第4页
第4页 / 共32页
《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构》由会员分享,可在线阅读,更多相关《《C++面向对象程序设计》-曹静-电子教案 第03章 C++程序的结构(32页珍藏版)》请在金锄头文库上搜索。

1、2019年5月24日星期五,C+面向对象程序设计,第3章 C+程序的结构,3.1 作用域和可见性 3.2 生存期 3.3 变量的存储类型 3.4 编译预处理和多文件结构 项目设计2 预处理及多文件结构,2019年5月24日星期五,C+面向对象程序设计,3.1 作用域和可见性,3.1.1 作用域 3.1.2 可见性,2019年5月24日星期五,C+面向对象程序设计,3.1.1 作用域,作用域是标识符在程序中有效的范围 块作用域 当标识符的声明出现在由一对大括号所括起来的一段程序(块)内时,该标识符的作用域从声明点开始,到块结束的大括号处为止,该作用域的范围具有局部性。 例如,如下代码:,void

2、 fun(int a) / a的作用域起始处 int b=1; / b的作用域起始处,2019年5月24日星期五,C+面向对象程序设计,3.1.1 作用域,函数原型作用域 函数原型作用域指的是在声明函数原型所指定的参数标识符的作用范围。,if(ab) int c; / c的作用域起始处 c=a-b; coutc; . / c的作用域终止处 / a和b的作用域终止处,2019年5月24日星期五,C+面向对象程序设计,3.1.1 作用域,这个作用范围是在函数原型声明中的左、右括号之间。 函数作用域 在C+语言中,只有goto语句中的标号标识符具有函数作用域。 由于goto语句的滥用导致程序流程无规

3、则、可读性差。因此现代程序设计方法不主张使用goto语句。 文件作用域 文件作用域是在所有函数定义之外声明的,其作用域从声明之处开始,直到文件结束。,2019年5月24日星期五,C+面向对象程序设计,3.1.2 可见性,可见性是从对标识符的引用的角度来谈的概念。如果标识符在某处可见,则就可以在该处引用此标识符。程序运行到某一点能够引用到的标识符就是该处可见的标识符。 作用域指的是标识符有效的范围,而可见性是分析在某一位置标识符的有效性。,2019年5月24日星期五,C+面向对象程序设计,3.1.2 可见性,作用域可见性的一般规则是: 标识符应声明在前,引用在后。 在同一作用域中,不能声明同名的

4、标识符。 在没有互相包含关系的不同的作用域中声明的同名标识符互不影响。 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。,2019年5月24日星期五,C+面向对象程序设计,3.1.2 可见性,作用域与可见性实例:,#include using namespace std; int i; /变量i具有文件作用域 void main() i=5; /文件作用域的i赋初值 /子块1 int i; /变量i具有块作用域 i=7; cout“i=“iendl; /输出7 cout“i=“iendl; /输出5 ,2019年5月24日星期五,C+

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

6、星期五,C+面向对象程序设计,3.2.2 动态生存期,在块作用域中声明的变量具有动态生存期,也可称为局部生存期变量。这种变量的生存期开始于程序执行经过其声明点时,而结束于其作用域结束处。 具有动态生存期的变量是在程序执行过程中,使用它的时候才分配存储单元,使用完毕就立即释放。,2019年5月24日星期五,C+面向对象程序设计,3.2.2 动态生存期,变量的动态生存期与可见性例子,#include using namespace std; int i=1; / i具有文件作用域和静态生存期 void main(void) / a具有块作用域和静态生存期,局部可见。 static int a; i

7、nt b=-10; / b, c具有块作用域和动态生存期。 int c=0; void other(void); cout“-MAIN-n“; cout“ i: “i“ a: “a“ b: “b“ c: “cendl;,2019年5月24日星期五,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具有块作用域和静态生存期,局部

8、可见 / 只在第一次进入函数时被初始化。,2019年5月24日星期五,C+面向对象程序设计,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; ,2019年5月24日星期五,C+面向对象程序设计,3.3 变量的存储类型,3.3.1 局部变量 3.3.2 全局变量 3.3.3 外部变量,2019年5月24日星期五,C+面向对象程序设计,3.3.1 局部变量,具有块作用域的变量称为局部

9、变量。 一般说来,用自动存储类型(auto)声明的变量都是限制在某个程序范围内使用的,即为局部变量。 使用关键字register声明寄存器类型的变量的目的是将所声明的变量放入寄存器内,从而加快程序的运行速度。 静态类型(static)变量也是一种局部变量。它和自动存储类型变量的最大不同之处在于:静态存储类型变量在内存中是以固定地址存放的,而不是以堆栈方式存放的。,2019年5月24日星期五,C+面向对象程序设计,3.3.1 局部变量,在C+语言中,声明局部变量的时候加上关键字static就构成了静态局部变量。 局部变量实例参见教材 例 3-3,2019年5月24日星期五,C+面向对象程序设计,

10、3.3.2 全局变量,具有文件作用域的变量称为全局变量。 在程序中声明的全局变量总是静态存储类型,若在全局变量前加上static,使该变量只在这个源程序文件内使用,称为全局静态存储变量或静态存储全局变量。 全局变量实例参见教材 例 3-4,2019年5月24日星期五,C+面向对象程序设计,3.3.3 外部变量,使用关键字extern声明的变量称为外部变量。一般是指定义在本程序外部的变量。 extern定义符的作用是将全局变量的作用域延伸到其它源程序文件。 在C+中,只有在两种情况下要使用外部变量。 第一种情况是在同一个源程序文件中,若定义的变量使用在前,声明在后,这时在使用前要声明为外部变量。

11、 (参见教材例 3-5) 第二种情况,当由多个源文件组成一个完整的程序时,在一个源程序文件中完全定义的变量要被其他若干个源文件引用时,引用的文件中要使用extern声明外部变量。 (参见教材例 3-6),2019年5月24日星期五,C+面向对象程序设计,3.4 编译预处理和多文件结构,3.4.1 编译预处理命令 3.4.2 多文件组织结构,2019年5月24日星期五,C+面向对象程序设计,3.4.1 编译预处理命令,预处理程序又称预处理器,它包含在编译器中。编译器在对源程序进行编译之前,首先要由预处理程序对程序文本进行预处理,把源代码转化成包含机器语言指令的目标文件。 宏定义指令#define

12、和#undef 在程序中可用#define来定义一个符号常量,例如: #define PI 3.1415926 #define还可以定义带参数的宏,例如: #difine MIN(x,y) (x)(y)?(x):(y),2019年5月24日星期五,C+面向对象程序设计,3.4.1 编译预处理命令,#undef的作用是删除由#define定义的宏,使之不再起作用。 文件包含指令#include 所谓“文件包含”是指将另一个源文件嵌入到当前源文件中该点处。 文件包含指令有两种格式: #include 这种格式用于嵌入C+提供的头文件。这些头文件一般位于C+系统目录的include子目录下。 #in

13、clude “文件名“ 预处理器遇到这种格式的包含指令后,首先在当前文件所在目录中进行搜索,如果找不到,再按标准方式搜索。这种方式适合于规定用户自己建立的头文件。,2019年5月24日星期五,C+面向对象程序设计,3.4.1 编译预处理命令,条件编译指令 一般情况下,源程序中所有的语句都参加编译,但有时也希望根据一定的条件去编译源文件的不同部分,这就是“条件编译”。 C+提供的条件编译语句有下列几种常用的形式: # if形式 #if / 当表达式值为真(非零)时编译程序段1 #else / 当表达式值为假(零)时编译程序段2 #endif,2019年5月24日星期五,C+面向对象程序设计,3.

14、4.1 编译预处理命令,#ifdef形式或#ifndef形式 #ifdef (或#ifndef ) #else #endif #if-#elif形式 #if / 当表达式1值为真(非零)时编译程序段1 #elif / 当表达式1值为假、表达式2值为真时编译程序段2 #elif / 当表达式1、表达式n-1值均为假,表达式n值为真时编译程序段n #else / 其他情况下编译程序段n-1 #endif,2019年5月24日星期五,C+面向对象程序设计,3.4.1 编译预处理命令,编译预处理命令实例参见教材 例 3-7,2019年5月24日星期五,C+面向对象程序设计,3.4.2 多文件组织结构,

15、在实际的程序设计中,一个程序通常由多个头文件和源文件组成,每个源文件是一个可编译的程序单位,头文件起着源文件之间接口的作用。 从下面的程序开发示意图来看看多文件的组织结构:,2019年5月24日星期五,C+面向对象程序设计,3.4.2 多文件组织结构,2019年5月24日星期五,C+面向对象程序设计,3.4.2 多文件组织结构,图中,源文件中含有包含头文件的预编译语句,经过预编译后,产生翻译单元,然后编译,进行语法检查,产生目标文件(.obj)。若干个目标文件经过连接,产生可执行文件(.exe)。 多文件组织结构实例参见 例 3-8,2019年5月24日星期五,C+面向对象程序设计,项目设计2 预处理及多文件结构,设计题目 预处理及多文件结构 设计概要 要求掌握多文件C+程序的编码方法和预处理的使用。 系统分析 书写头文件时应该遵循的几点规则: 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。,2019年5月24日星期五,C+面向对象程序设计,项目设计2 预处理及多文件结构,用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #includee ”filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号