chap5-C++课件-清华大学郑莉.ppt

上传人:b****2 文档编号:2638319 上传时间:2022-11-04 格式:PPT 页数:57 大小:160KB
下载 相关 举报
chap5-C++课件-清华大学郑莉.ppt_第1页
第1页 / 共57页
chap5-C++课件-清华大学郑莉.ppt_第2页
第2页 / 共57页
chap5-C++课件-清华大学郑莉.ppt_第3页
第3页 / 共57页
chap5-C++课件-清华大学郑莉.ppt_第4页
第4页 / 共57页
chap5-C++课件-清华大学郑莉.ppt_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

chap5-C++课件-清华大学郑莉.ppt

《chap5-C++课件-清华大学郑莉.ppt》由会员分享,可在线阅读,更多相关《chap5-C++课件-清华大学郑莉.ppt(57页珍藏版)》请在冰豆网上搜索。

chap5-C++课件-清华大学郑莉.ppt

第五章第五章C+程序的结构程序的结构郑莉郑莉董渊董渊张瑞丰张瑞丰编著编著清华大学出版社清华大学出版社C+语言程序设计(第3版)C+语言程序设计清华大学郑莉本章主要内容本章主要内容l作用域与可见性作用域与可见性l对象的生存期对象的生存期l数据与函数数据与函数l静态成员静态成员l共享数据的保护共享数据的保护l友元友元l编译预处理命令编译预处理命令l多文件结构和工程多文件结构和工程2C+语言程序设计清华大学郑莉函数原型的作用域函数原型的作用域l函数原型中的参数,其作用域始于函数原型中的参数,其作用域始于(,结束于,结束于)。

l例如,设有下列原型声明:

例如,设有下列原型声明:

doubleArea(doubleradius);radius的作用域仅在于此,不能用于程序正文其它地方,因而可有可无。

作用域与可见性3C+语言程序设计清华大学郑莉块作用域块作用域l在块中声明的标识符,其作用域自声明处在块中声明的标识符,其作用域自声明处起,限于块中,例如:

起,限于块中,例如:

voidfun(inta)intb(a);cinb;if(b0)intc;.c的作用域b的作用域作用域与可见性4C+语言程序设计清华大学郑莉类作用域类作用域l类作用域作用于特定的成员名。

类作用域作用于特定的成员名。

l类类X的成员的成员M具有类作用域具有类作用域,对对M的访问方的访问方式如下:

式如下:

如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员M。

通过表达式x.M或者X:

M访问。

通过表达式prt-M作用域与可见性5C+语言程序设计清华大学郑莉文件作用域文件作用域l不在前述各个作用域中出现的声明,不在前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符具有文件作用域,这样声明的标识符的作用域开始于声明点,结束于文件的作用域开始于声明点,结束于文件尾。

尾。

作用域与可见性6C+语言程序设计清华大学郑莉可见性可见性l可见性是从对标识符的引用的角度来谈可见性是从对标识符的引用的角度来谈的概念的概念l可见性表示从内层作用域向外层作用域可见性表示从内层作用域向外层作用域“看看”时能看见什么。

时能看见什么。

l如果标识在某处可见,则就可以在该处如果标识在某处可见,则就可以在该处引用此标识符。

引用此标识符。

块作用域类作用域文件作用域作用域与可见性7C+语言程序设计清华大学郑莉可见性可见性l标识符应声明在先,引用在后。

标识符应声明在先,引用在后。

l如果某个标识符在外层中声明,且在内层中如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层没有同一标识符的声明,则该标识符在内层可见。

可见。

l对于两个嵌套的作用域,如果在内层作用域对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。

外层作用域的标识符在内层不可见。

作用域与可见性8C+语言程序设计清华大学郑莉同一作用域中的同名标识符同一作用域中的同名标识符l在同一作用域内的对象名、函数名、在同一作用域内的对象名、函数名、枚举常量名会隐藏同名的类名或枚举枚举常量名会隐藏同名的类名或枚举类型名。

类型名。

l重载的函数可以有相同的函数名。

重载的函数可以有相同的函数名。

作用域与可见性9C+语言程序设计清华大学郑莉#includeusingnamespacestd;inti;/文件作用域intmain()i=5;inti;/块作用域i=7;couti=iendl;/输出7couti=i;/输出5return0;作用域与可见性例例5.110C+语言程序设计清华大学郑莉对象的生存期对象的生存期对象从产生到结束的这段时间就是对象从产生到结束的这段时间就是它的生存期。

它的生存期。

在对象生存期内,对象将在对象生存期内,对象将保持它的值,直到被更新为止。

保持它的值,直到被更新为止。

11C+语言程序设计清华大学郑莉静态生存期静态生存期l这种生存期与程序的运行期相同。

这种生存期与程序的运行期相同。

l在文件作用域中声明的对象具有这种在文件作用域中声明的对象具有这种生存期。

生存期。

l在函数内部声明静态生存期对象,要在函数内部声明静态生存期对象,要冠以关键字冠以关键字static。

对象的生存期12C+语言程序设计清华大学郑莉#includeusingnamespacestd;inti=5;/文件作用域intmain()couti=iendl;return0;i具有静态生存期对象的生存期例例13C+语言程序设计清华大学郑莉动态生存期动态生存期l块作用域中声明的,没有用块作用域中声明的,没有用static修修是的对象是动态生存期的对象(习惯是的对象是动态生存期的对象(习惯称局部生存期对象)。

称局部生存期对象)。

l开始于程序执行到声明点时,结束于开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。

命名该标识符的作用域结束处。

对象的生存期14C+语言程序设计清华大学郑莉#includeusingnamespacestd;voidfun();intmain()fun();fun();voidfun()staticinta=1;inti=5;a+;i+;couti=i,a=aendl;运行结果:

i=6,a=2i=6,a=3i是动态生存期a是静态生存期对象的生存期例例15C+语言程序设计清华大学郑莉例例5-2变量的生存期与可见性变量的生存期与可见性#includeusingnamespacestd;inti=1;/i为全局变量,具有静态生存期。

为全局变量,具有静态生存期。

intmain()staticinta;/静态局部变量,有全局寿命,局部可见。

静态局部变量,有全局寿命,局部可见。

intb=-10;/b,c为局部变量,具有动态生存期。

为局部变量,具有动态生存期。

intc=0;voidother(void);cout-MAIN-n;couti:

ia:

ab:

bc:

cendl;c=c+8;other();cout-MAIN-n;couti:

ia:

ab:

bc:

cendl;i=i+10;other();对象的生存期16voidother(void)staticinta=2;staticintb;/a,b为静态局部变量,具有全局寿命,局部可见。

为静态局部变量,具有全局寿命,局部可见。

/只第一次进入函数时被初始化。

只第一次进入函数时被初始化。

intc=10;/C为局部变量,具有动态生存期,为局部变量,具有动态生存期,/每次进入函数时都初始化。

每次进入函数时都初始化。

a=a+2;i=i+32;c=c+5;cout-OTHER-n;couti:

ia:

ab:

bc:

cendl;b=a;1717运行结果:

运行结果:

-MAIN-i:

1a:

0b:

-10c:

0-OTHER-i:

33a:

4b:

0c:

15-MAIN-i:

33a:

0b:

-10c:

8-OTHER-i:

75a:

6b:

4c:

151818C+语言程序设计清华大学郑莉例例5-3具有静态、动态生存期对象的时钟程序具有静态、动态生存期对象的时钟程序#includeusingnamespacestd;classClock/时钟类声明时钟类声明public:

/外部接口外部接口Clock();voidSetTime(intNewH,intNewM,intNewS);/三个形参均具有函数原型作用域三个形参均具有函数原型作用域voidShowTime();Clock()private:

/私有数据成员私有数据成员intHour,Minute,Second;对象的生存期19/时钟类成员函数实现时钟类成员函数实现Clock:

Clock()/构造函数构造函数Hour=0;Minute=0;Second=0;voidClock:

SetTime(intNewH,intNewM,intNewS)Hour=NewH;Minute=NewM;Second=NewS;voidClock:

ShowTime()coutHour:

Minute:

Secondendl;2020ClockglobClock;/声明对象声明对象globClock,/具有静态生存期,文件作用域具有静态生存期,文件作用域intmain()/主函数主函数coutFirsttimeoutput:

endl;/引用具有文件作用域的对象:

引用具有文件作用域的对象:

globClock.ShowTime();/对象的成员函数具有类作用对象的成员函数具有类作用域域globClock.SetTime(8,30,30);ClockmyClock(globClock);/声明具有块作用域的对象声明具有块作用域的对象myClockcoutSecondtimeoutput:

endl;myClock.ShowTime();/引用具有块作用域的对象引用具有块作用域的对象2121程序的运行结果为:

程序的运行结果为:

Firsttimeoutput:

0:

0:

0Secondtimeoutput:

8:

30:

302222C+语言程序设计清华大学郑莉数据与函数数据与函数l数据存储在局部对象中,通过参数传数据存储在局部对象中,通过参数传递实现共享递实现共享函数间的参数传递。

函数间的参数传递。

l数据存储在全局对象中。

数据存储在全局对象中。

l将数据和使用数据的函数封装在类中。

将数据和使用数据的函数封装在类中。

数据与函数23C+语言程序设计清华大学郑莉使用全局对象使用全局对象#includeusingnamespacestd;intglobal;voidf()global=5;voidg()coutglobalendl;intmain()f();g();/输出输出“5”return0;数据与函数24C+语言程序设计清华大学郑莉将函数与数据封装将函数与数据封装#includeusingnamespacestd;classApplicationpublic:

voidf();voidg();private:

intglobal;voidApplication:

f()global=5;voidApplication:

g()coutglobalendl;intmain()ApplicationMyApp;MyApp.f();MyApp.g();return0;数据与函数25C+语言程序设计清华大学郑莉静态成员静态成员l静态数据成员静态数据成员用关键字static声明该类的所有对象维护该成员的同一个拷贝必须在类外定义和初始化,用(:

)来指明所属的类。

l静态成员函数静态成员函数类外代码可以使用类名和作用域操作符来调用静态成员函数。

静态成员函数只能引用属于该类的静态数据成员或静态成员函数。

静态成员26C+语言程序设计清华大学郑莉例例5-4具有静态数据成员的具有静态数据成员的Point类类#includeusingnamespacestd;classPointpublic:

Point(intxx=0,intyy=0)X=xx;Y=yy;countP+;Point(Point&p);intGetX()returnX;intGetY()returnY;voidGetC()coutObjectid=countPendl;private:

intX,Y;staticintcountP;静态成员27Point:

Point(Point&p)X=p.X;Y=p.Y;countP+;intPoint:

countP=0;intmain()PointA(4,5);coutPointA,A.GetX(),A.GetY();A.GetC();PointB(A);coutPointB,B.GetX(),B.GetY();B.GetC();2

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

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1