第6章 C++程序的结构.ppt_第1页
第6章 C++程序的结构.ppt_第2页
第6章 C++程序的结构.ppt_第3页
第6章 C++程序的结构.ppt_第4页
第6章 C++程序的结构.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章 C+程序的结构,C+语言程序设计,2,本章主要内容,变量的类型 作用域与可见性 文件结构与编译预处理命令 名字空间,6.1 变量的类型,除了按数据类型区分变量外,根据变量定义的位置,可以把变量分成全局变量与局部变量。全局变量是指定义在函数体外部的变量,它能被所有函数使用。局部变量是指定义在函数或复合语句中的变量,只能在函数或复合语句中使用。,4,变量的存储类型,auto存储类 属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 register存储类 存放在通用寄存器中。 extern存储类 在所有函数和程序段中都可引用。 static存储类 在内存中是以固定地址存放的,在整个程序

2、运行期间都有效。,运行结果: in p1 G=11 in p2 G=22 in p2 g=222 in p G=22 in p g=222,运行结果: m=1 n=1 m=1 n=2 m=1 n=3 m=1 n=4,6.1.2 变量的存储类型,static型变量,6.1.3 变量在内存中的存储,当一个程序准备运行时,操作系统会为程序分配一块内存空间,C+程序的内存通常被分为四个区: 全局数据区(data area) 代码区(code area) 栈区(stack area) 堆区(heap area) 全局变量、静态变量、字符串常量、常变量存放在全局数据区;所有的函数和代码存放在代码区;为运行

3、函数而分配的函数参数、局部变量、返回地址存放在栈区;堆区用于动态内存分配。 变量的生存期为从产生到消失的时期。全局变量、静态变量、常变量生存周期为整个程序的生存周期,因此称为静态生存期;局部变量的生存周期起于函数调用,结束于函数调用结束,其生存期是动态的,因此称为动态生存期。,注意: 堆空间不是系统为程序自动分配的,它是程序执行过程中由new语句为变量分配的。即使指向堆空间的指针变量消失,new语句分配的空间也不会消失。new语句分配的空间由delete语句释放。,6.1.3 变量在内存中的存储,常变量(常量)、全局变量、局部静态变量、字符串常量在程序运行前在数据区进行分配。并且依次按照常变量

4、、全局变量、局部静态变量的顺序从低地址向高地址分配。常变量按定义的先后次序分配,全局变量、局部变量也一样。,运行结果: Adddress of parameter variable: ,radius 的作用域仅在于此,不能用于程序正文其它地方,因而可有可无。,作用域与可见性,12,块作用域,在块( 标记的一段程序单元)中声明的标识符,其作用域自声明处起,限于块中,例如: void fun(int a) int b(a); cinb; if (b0) int c; . ,作用域与可见性,13,类和文件作用域,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则。 不在前述各个作用域中出

5、现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件尾。,作用域与可见性,程序实例,14,可见性的概念,可见性是从对标识符的引用的角度来谈的概念。 可见性表示从内层作用域向外层作用域“看”时能看见什么。 如果标识在某处可见,则就可以在该处引用此标识符。,作用域与可见性,15,可见性的一般规则,标识符应声明在先,引用在后。 在同一作用域中,不能声明同名的标识符。 对于两个嵌套的作用域,如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。

6、,作用域与可见性,16,例,#include int i; /文件作用域 int main() i = 5; int i;/块作用域 i = 7; couti= i endl;/输出7 couti= i ;/输出5 return 0; ,作用域与可见性,返 回,17,例2 块作用域对象的生存期,#include void fun(); void main() fun(); fun(); void fun() static int a=1; int i=5; a+; i+; couti=i,a=aendl; ,i,a均为块作用域 i是动态生存期 a是静态生存期 运行结果: i=6, a=2 i=

7、6, a=3,对象的生存期,18,变量的生存期与可见性,全局变量 具有静态生存期。 静态局部变量 有全局寿命,局部可见。 只第一次进入函数时被初始化。 一般局部变量 具有动态生存期。 每次进入函数时都初始化。,对象的生存期,19,数据与函数,数据存储在局部对象中,通过参数传递实现共享函数间的参数传递。 数据存储在全局对象中。 将数据和使用数据的函数封装在类中。,例,例,#include int global; void f() global=5; void g() coutglobalendl; ,int main() f(); g(); /输出“5” return 0; ,返 回,例 函数间

8、数据共享,21,6.3 编译预处理命令,#include 包含指令 将一个源文件嵌入到当前源文件中该点处。 #include 按标准方式搜索,文件位于C+系统目录的include子目录下 #include文件名 首先在当前目录中搜索,若没有,再按标准方式搜索。 #define 宏定义指令 定义符号常量,已被const定义语句取代。 定义带参数宏,已被内联函数取代。 #undef 删除由#define定义的宏,使之不再起作用。,22,条件编译指令:#if 和 #endif,#if 常量表达式 /当“ 常量表达式”非零时编译 程序正文 #endif .,编译预处理命令,23,条件编译指令:#els

9、e,#if 常量表达式 /当“ 常量表达式”非零时编译 程序正文1 #else /当“ 常量表达式”为零时编译 程序正文2 #endif,编译预处理命令,24,条件编译指令:#elif,#if 常量表达式1 程序正文1 /当“ 常量表达式1”非零时编译 #elif 常量表达式2 程序正文2 /当“ 常量表达式2”非零时编译 #else 程序正文3 /其它情况下编译 #endif,编译预处理命令,6.4 名字空间,一个软件往往由多个模块(组件)组成,这些模块由不同程序员(软件商)提供,不同模块可能使用了相同的标识符。简单说就是同一个名字在不同模块中代表不同的事物。当这些模块用到同一个程序中,同名

10、标识符就引起冲突。C+提供名字空间(namespace) 将相同的名字放在不同空间中来防止命名冲突。 定义一个名字空间的格式如下: 其中: namespace 为关键字。 名称为名字空间标识符。 成员为函数、变量、常量、自定义类型等。,namespace 名称 成员; ,6.4 名字空间,例如: 一个名为TsingHua的软件公司为自己的组件建立了一个名字空间。将它存入头文件:TsingHua.h,/*TsingHua.h*/ namespace TsingHua int year=2005; char name=TsingHua Software; ShowName() coutnameendl; ,6.4 名字空间,(1)个别使用声明方式,格式如下: 其中: :为作用域分辨符。 成员使用形式包括函数调用式、变量名、常量名、类型名等,C+语言程序设计教程 第5章 构造数据类型,名字空间名:成员使用形式,6.4 名字空间,(2)全局声明方式: 这种方式表明此后使用的成员来自于声明处的名字空间,程序p6_6.cpp中第6行: using namespace std; 表明此后使用的名字空间为C+标准库名字空间std,此后的cout、endl均来自名字空间std。 (3) 全局声明个别成员: 这种声明形式表明以后使用的成员M来自名字空间N。成员名M为函数、变量、常量、类型的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论