中国石油大学(华东)理学院C课程第五章

上传人:宝路 文档编号:4151601 上传时间:2017-08-06 格式:PPT 页数:78 大小:2.05MB
返回 下载 相关 举报
中国石油大学(华东)理学院C课程第五章_第1页
第1页 / 共78页
中国石油大学(华东)理学院C课程第五章_第2页
第2页 / 共78页
中国石油大学(华东)理学院C课程第五章_第3页
第3页 / 共78页
中国石油大学(华东)理学院C课程第五章_第4页
第4页 / 共78页
中国石油大学(华东)理学院C课程第五章_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《中国石油大学(华东)理学院C课程第五章》由会员分享,可在线阅读,更多相关《中国石油大学(华东)理学院C课程第五章(78页珍藏版)》请在金锄头文库上搜索。

1、1,第五章 C+程序的结构,C+语言程序设计,本章主要内容,作用域与可见性对象的生存期数据与函数静态成员友元共用数据的保护常类型多文件结构和工程编译预处理命令,double GetPower(int a,int b);int main()int x,y; cinxy;coutGetPower(x,y)0)a=GetPower(x,y-1)*x;else if(x=0) /y0,x=0 cout“error!”endl; a=0; /y0,x=0 else a=GetPower(x,y+1)/x; /yb; if (b0) int c; . ,作用域与可见性,指出下面程序的运行结果,#inclu

2、de using namespace std;void fun()int num=10;coutnumendl;num+;int main()for(int i=0;i3;i+) fun();return 0;,/变量num将在每次进入函数fun()时进行初始化,101112,101010,局部作用域的效果,嵌套作用域中的局部变量,int main()int x=10;if(x=10)int y=20;coutx+y=x+y0)int i; i=j/2;coutiendl;coutiendl;return 0;,1510,如果内层的块中声明的局部变量与外层快中的变量同名,内层块中的变量将会隐藏

3、外层块中的变量。,一叶障目,/内部i将隐藏或屏蔽外层的i,思 考,for(int i=0;i2;i+) for(int j=0;j3;j+) coutijendl; for(int k=0;k4;k+) coutkendl; coutjendl;,类作用域,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则。,作用域与可见性,class ZRFpublic:int den; ZRF(int n=0,int d=1):num(n),den(d) /构造函数 void disp() coutnum/den; private:int num;int main()ZRF z(20);cou

4、tz=;z.disp(); /类外访问类的公有函数coutnz=;z.den=50;z.disp(); /类外访问类的公有成员coutM访问。,文件作用域,标识符的作用域开始于声明点,结束于文件尾。最大的作用域。,作用域与可见性,文件作用域变量筛选偶数,int count;void fun1()void fun2();coutcount:countendl; /可访问countfun2();void fun2()int count; /这是局部变量;for(count=0;count2;count+) cout*;int main()int i;for(i=0;i10;i+)count=i+;

5、fun1();return 0;,count:0*count:2*count:4*count:6*count:8*,全局变量具有文件作用域,在文件中所有函数都可以访问。,思考: 为什么避免使用不必要的全局变量?,可见性,可见性是从对标识符的引用的角度来谈的概念如果标识在某处可见,则就可以在该处引用此标识符。,#includeusing namespace std;int i; int main() i=5; int i; i=7; couti=iendl; couti=i; return 0;,例 5.1,/块作用域,/输出7,/文件作用域,/输出5,可 见 性,在同一作用域中,不能声明同名的

6、标识符。外层声明的标识符:若内层没有声明同一标识符,则其在内层可见。若内层声明同名标识符,则其在内层不可见。,对象的生存期,对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。,静态生存期,动态生存期,静态生存期,这种生存期与程序的运行期相同。在文件作用域中声明的对象具有这种生存期。在函数内部声明静态生存期对象,要冠以关键字static 。,#includeusing namespace std;int i=5; /文件作用域int main( ) couti=iendl; return 0;,例,i具有静态生存期,动态生存期,块作用域中声明的对象是动态

7、生存期的对象(习惯称局部生存期对象)。开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。,#includeusing namespace std;void fun( );void main( ) fun( ); fun( );void fun( ) static int a=1; int i=5; a+; i+; couti=i,a=aendl;,运行结果:i=6, a=2i=6, a=3i是动态生存期a是静态生存期,例,例5-2 变量的生存期与可见性,#includeusing namespace std;int i=1; / i 为全局变量,具有静态生存期。void main(v

8、oid) 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; 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为静态局部变量,具有全局寿命,局部可见。 /只第一次进

9、入函数时被初始化。 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;,运行结果:-MAIN- i: 1 a: 0 b: -10 c: 0-OTHER- i: 33 a: 4 b: 0 c: 15-MAIN- i: 33 a: 0 b: -10 c: 8-OTHER- i: 75 a: 6 b: 4 c: 15,例5-3 具有静态、动态生存期对象的程序,#includeusing namespace std;class C

10、lock /时钟类声明public:/外部接口Clock();void SetTime(int NewH, int NewM, int NewS); /三个形参均具有函数原型作用域void ShowTime();Clock()private:/私有数据成员int Hour,Minute,Second;,/时钟类成员函数实现Clock:Clock()/构造函数Hour=0;Minute=0;Second=0;void Clock:SetTime(int NewH, int NewM, int NewS)Hour=NewH;Minute=NewM;Second=NewS;void Clock:Sh

11、owTime()coutHour:Minute:Secondendl;,Clock globClock;/声明对象globClock,/具有静态生存期,文件作用域int main( )/主函数coutFirst time output:endl;/引用具有文件作用域的对象globClock:globClock.ShowTime(); /成员函数具有类作用域globClock.SetTime(8,30,30);Clock myClock(globClock); /块作用域对象myClockcoutSecond time output:endl;myClock.ShowTime(); /引用具有块作用域的对象myClock return 0;,

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

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

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