面向对象程序设计语言C.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象程序设计语言C.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言
- 资源描述:
-
1、第六章第六章 C+程序的结构程序的结构6.1 变量的类型变量的类型 除了按数据类型区分变量外,根据变量定义的位置根据变量定义的位置,可以把变量分成全局变量与局部变量。全局变量全局变量是指定义在函数体外部的变量,它能被所有函数使用。局部变量局部变量是指定义在函数或复合语句中的变量,只能在函数或复合语句中使用。电子科技大学计算机学院 软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型int g=100000;int sum(int x,int y)int sum=0;for(int i=x;i=y;i+)sum=sum+i;return sum;void main()
2、int x=1,y=100;coutsum(x,y)+gendl;12345678910111213g为全局变量sum()中 x、y为局部变量main()中的 x、y为局部变量6.1.2 变量的存储类型变量的存储类型 C+中变量有auto、extern、register、static四种存储类型。1.auto说明符说明符 auto说明符说明定义的是一个局部变量。局部变量默认存储类型为auto,所以在程序中很少使用auto说明符说明。2.register说明符说明符 register说明符在定义变量时说明此变量存储在CPU中的寄存器中,以加快存取速度。一般编译器自己选择几个变量采用寄存器存储,不
3、需要在程序中声明。3.extern说明符说明符 如果一个完整的计算机程序很大,分成多个模块,放在不同的文件中,分开编译成目标文件,最后连接成一个完整的可执行代码。对于所有模块共同使对于所有模块共同使用的全局变量用的全局变量,如果在所有的模块中都定义,在连接时就会出错。解决办法是只在一个模块中定义全局变量只在一个模块中定义全局变量,在其他模块中用其他模块中用extern说明说明这是一个“外来外来”的全局变量。电子科技大学计算机学院 软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型电子科技大学计算机学院 软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造
4、造数数据据类类型型/*p6_1_p.cpp *主程序 */#include using namespace std;extern void p1dispG();extern void p2dispG();extern void p2dispg();int G=0,g=0;void main()p1dispG();p2dispG();p2dispg();coutin p G=Gendl;coutin p g=gendl;123456789101112131415161718/p6_1_p1.cpp#include using namespace std;extern int G;void p1d
5、ispG()G=11;coutin p1 G=Gendl;123456789/p6_1_p2.cpp#include using namespace std;extern int G;extern int g;void p2dispG()G=22;coutin p2 G=Gendl;void p2dispg()g=222;coutin p2 g=gendl;123456789101112131415in p1 G=11in p2 G=22in p2 g=222in p G=22in p g=222 6.1.2 变量的存储类型变量的存储类型 4.static4.static说明符说明符 stat
6、ic可用来声明全局静态变量和局部静态变量。当声明全局静态变量声明全局静态变量时,全局静态变量只能供本模块使用只能供本模块使用,不能被其它模块再声明为extern变量。例如:将程序p6_1_p.cpp中的全局变量声明为:static int G=0;那么在其他模块中就不能声明为:extern int G;/错误,G已经是一个static变量;电子科技大学计算机学院 软件学院static 数据类型 变量名=初值;C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型F注意注意:当一个局部变量声明为static变量,它既具有局部变量的性质:只能在函数体局部存取;又具有全局变量的性质
7、:函数多次进入,变量的值只初始化一次。因此静态局部变量实质是一个供函数局部存取的全局变量实质是一个供函数局部存取的全局变量。6.1.2 变量的存储类型变量的存储类型 static型变量型变量电子科技大学计算机学院 软件学院/*6_2.cpp *静态局部变量的使用 */#includeusing namespace std;void fun()static int n;int m=0;n+;m+;coutm=m,n=nendl;void main()for(int i=0;i4;i+)fun();12345678910111213141516171819 C+语语言言程程序序设设计计教教程程 第
8、第6章章构构造造数数据据类类型型m=1 n=1m=1 n=2m=1 n=3m=1 n=4 静态局部变量静态局部变量n只是在函只是在函数数fun()第一次进入第一次进入时初始化时初始化0,随后每,随后每次进入不再赋初值次进入不再赋初值 6.1.3 变量在内存中的存储变量在内存中的存储 当一个程序准备运行时,操作系统会为程序分配一块内存空间,C+程序的内存通常被分为四个区:全局数据区(data area)代码区(code area)栈区(stack area)堆区(heap area)全局变量、静态变量、字符串常量、常变量存放在全局数据区全局数据区;所有的函数和代码存放在代码区代码区;为运行函数而
9、分配的函数参数、局部变量、返回地址存放在栈区栈区;堆区堆区用于动态内存分配。变量的生存期变量的生存期为从产生到消失的时期。全局变量、静态变量、常变量生存周期为整个程序的生存周期,因此称为静态生存期静态生存期;局部变量的生存周期起于函数调用,结束于函数调用结束,其生存期是动态的,因此称为动态生存期动态生存期。电子科技大学计算机学院 软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型F注意注意:堆空间不是系统为程序自动分配的,它是程序执行过程中由new语句为变量分配的。即使指向堆空间的指针变量消失,new语句分配的空间也不会消失。new语句分配的空间由delete语句
10、释放。6.1.3 变量在内存中的存储变量在内存中的存储 常变量常变量(常量常量)、全局变量、局部静、全局变量、局部静态变量、字符串常量在程序运态变量、字符串常量在程序运行前在数据区进行分配。并且行前在数据区进行分配。并且依次按照常变量、全局变量、依次按照常变量、全局变量、局部静态变量的顺序从低地址局部静态变量的顺序从低地址向高地址分配。常变量按定义向高地址分配。常变量按定义的先后次序分配,全局变量、的先后次序分配,全局变量、局部变量也一样。局部变量也一样。电子科技大学计算机学院 软件学院/*p6_3.cpp *显示各类变量的内存分配 */#include using namespace std
11、;int k=300;const int i=100;#define n 10const int j=200;void fun(int i=1,int j=2)int k=3;static int l=0;char*p=new charn+1;for(int m=0;mn;m+)pm=A+m;pm=0;coutAdddress of parameter variable:endl;12345678910111213141516171819 C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型6.1.2 变量的存储类型变量的存储类型 电子科技大学计算机学院 软件学院 cout
12、&i=&it&j=&jendl;coutAdddress of local variable:endl;cout&k=&kt&p=&pt&m=&mendl;coutAdddress of static local variable:endl;cout&l=&lendl;coutAddress of heap:(void*)pendl;coutbefore delete p=pendl;delete p;coutafter delete:(void*)pendl;coutp=pendl;void main()L1:fun();L2:coutAdddress of global variable:
13、endl;cout&i=&it&j=&jt&k=&kendl;coutAddress of function:endl;cout&fun=&funt&main&mainendl;20212223 2425262728293031323334353637 39C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型Adddress of parameter variable:&i=0013FF2C&j=0013FF30Adddress of local variable:&k=0013FF20&p=0013FF1C&m=0013FF18Adddress of static loc
14、al variable:&l=0047773CAddress of heap:00480410 /释放堆空间前指针的值before delete p=ABCDEFGHIJ /释放堆空间前堆中的内容after delete:00480410 /释放堆空间后指针的值不变p=葺葺葺葺葺葺葺?/释放堆空间后,堆中的内容无意义Adddress of global variable:&i=0046C01C&j=0046C020&k=00474DC0Address of function:&fun=004010A0&main=0040123F 6.1.2 变量的存储类型变量的存储类型电子科技大学计算机学院
15、软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型F解释解释 :当函数被调用时才为函数的形参、返回代码地址、局部变量分配空间。由于空间在栈中,所以从栈底开始依次按形参、返回代码地址、局部变量的顺序从高地址向低地址分配。其中,在分配形参地址时,按从右向左从右向左的顺序;分配各局部变量的地址时,按定义的先后次序。当函数调用结束,该函数占用的栈空间收回。收回的顺序(即各变量消失的顺序)与分配的顺序相反相反。程序运行时,系统为各个函数的执行代码在代码段中分配空间,然后将代码调入内存。各函数在代码区的排列次序按函数定义的先后次序先后次序。程序运行结束,程序占用的代码段空间收
16、回。常变量(常量)、全局变量、局部静态变量、字符串常量在程序运行前在数据区进行分配。并且依次按照常变量、全局变量、局部静态变量的顺序从低地址从低地址向高地址分配向高地址分配。常变量按定义的先后次序分配,全局变量、局部变量也一样。当程序运行结束后,各全局变量的空间被系统收回,收回的顺序与分配的顺序相同,即:先分配先收回先分配先收回。堆空间不是不是系统为程序自动分配的,它是程序执行过程中由new语句为变量分配的。即使指向堆空间的指针变量消失,new语句分配的空间也不会消失不会消失。New语句分配的空间由由delete语句释放语句释放。变量的生存期变量的生存期为从产生到消失的时期。全局变量、静态变量
17、、常变量生存周期为整个程序的生存周期,因此称为静态生存期静态生存期;局部变量的生存周期起于函数调用,结束于函数调用结束,其生存期是动态的,因此称为动态生存期动态生存期。电子科技大学计算机学院 软件学院 地址 栈顶 0013FF18 m p 局部变量 k 0013FF24 0013FF80 栈区 0013FF28 004018F1 函数的返回地址 0013FF2C i j 函数的形参 栈底 004010A0 void fun()p=new charn+1;for(int m=0;mn;m+)pm=A+m;0040123F void main()程序入口 代码区 004018E8 L1:fun()
18、;004018F4 L2:coutAdddress.0046C01C i j 全局只读变量 全局数据区 00474DC0 k 全局变量 0047773C l 局部静态变量 00480410 A B C D E F G H 堆区 I J 6.2 标识符的作用域与可见性标识符的作用域与可见性 标识符的作用域标识符的作用域是标识符在程序源代码中的有效范围,从小到大分为函数原型作用域、块作用域(局部作用域),文件作用域(全局作用域)。1.函数原型作用域函数原型作用域 函数原型作用域函数原型作用域是C+程序中最小作用域。函数原型声明时形式参数的作用范围就是函数原型的作用域。例如:有下列函数声明:fun(
19、int i,int j);标识符i、j的作用域为函数原型,即函数fun形参的两个括号之间,在其他地方不能引用这些标识符。2.2.块作用域块作用域 所谓的块块就是用括起来的一段程序,在块中定义的标识符,作用域从声明处开始,一直到块的大括号为止。其中有下列情况属于一个块:(1)(1)函数的形参与函数体属于一个块;(2)(2)for()语句中,括号()中属于一个块;电子科技大学计算机学院 软件学院C+语语言言程程序序设设计计教教程程 第第6章章构构造造数数据据类类型型6.2 标识符的作用域与可见性标识符的作用域与可见性电子科技大学计算机学院 软件学院/*p6_4.cpp *标识符作用域 */#inc
展开阅读全文