《面向对象程序设计》中国科学技术大学计算机系马建辉.ppt

上传人:sh****n 文档编号:12672790 上传时间:2020-05-13 格式:PPT 页数:31 大小:301.81KB
返回 下载 相关 举报
《面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第1页
第1页 / 共31页
《面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第2页
第2页 / 共31页
《面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第3页
第3页 / 共31页
点击查看更多>>
资源描述
第六章类成员(二),面向对象程序设计(C+),6类成员(二),6.1成员变量与成员函数6.2this指针6.3成员对象6.4const(常量)6.5const对象与const成员函数6.6静态成员变量与静态成员函数,6.4const量(常量),从高质量程序设计的角度考察C+中的const!,6.4.1const的意义,最低权限原则:软件工程的基本原则之一。const的意义:在可更改与不可更改之间画一条明确的界线,提高程序的安全性和可控性。eg:constinti=100;i+;/编译错误,6.4.2C中的const(常量),“一个不能被改变的普通变量”。因此:-总是占用存储;-名字是全局的。也就是说,默认情况下,const是外部连接的(容易引起“名字冲突”)。constintbufsize;/无需初始化constintbufsize=100;charbufbufsize;/error!Why?在编译时,编译器并不知道const的值,它只是一个“运行时常量”。,6.4.3C+的Const,通常,C+编译器不为const创建存储空间,而是把它保存在“符号表”里,即“编译时常量”。constintbufsize;/非法,未赋初值constintbufsize=100;charstrbufbufsize;/OK,Why?默认情况下,C+中的const是内部连接的,也就是说,const仅在const被定义过的文件里才是可见的。(因此,不用担心名字冲突)当定义一个const时,必须赋一个值给它,除非用extern做出了清楚的说明。当用extern说明了const时,编译器会强制为const分配空间,而不是保存在符号表中。externconstintbufsize;/未赋初值,但extern声明了bufsize在另一个文件中定义及赋初值。,6.4.3C+的Const(续),const用于集合,必须为其分配内存,(因为编译器“不愿意”把集合保存到符号表中,太复杂)。constinti=1,2,3,4;floatfi3;/非法,编译期间无法知道存储空间的值。structSinti,j;constSs=1,2,3,4;doubleds1.j;/非法,理由同上intmain()/:,6.4.4C+中const的作用,值替代:C+的constvsC中的宏替换#defineBUFSIZE100;/宏替换charstrBUFSIZE;vsconstintbufsize=100;/C+的constcharstrbufsize;在宏替换中,BUFSIZE没有类型信息,不能进行类型检查;宏定义是全局的,容易名字冲突。,6.4.4C+中const的作用(续),安全性如果想用运行期间产生的值初始化一个变量,并且知道在该变量的生命期内其值不变,则可用const限定该变量,达到最大限度地保证改变量安全性的目的。intmain()couttypeacharacter/:,6.4.5const的应用:const指针,1.指向const的指针(指针指向的内存地址的值不能改变)constint*u;/u是一个指针,它指向constint;intconst*v;/v是一个指向恰好是const的int的普通指针;2.const指针(指针的值不能改变)constintd=1;int*constw=/w是一个指针,这个指针是指向int的const指针注意:C+中,const指针必须赋初值,6.4.5const的应用:const指针(续),3.const指针指向const对象intd=1;constint*constx=/x,x2,*x,*x2都不能改变,非const对象的地址可以赋给const指针;const对象的地址绝不可以赋给非const指针。(因为这样做可能导致通过非const指针改变const对象的值的后果)intd=1;constinte=2;int*u=/legalbutbadpracticeintmain()/:,注意,6.4.6const的应用:const参数,1.传递const值voidf1(constinti)i+;/编译时错误,i不能改变“形参”不能被改变or“实参”不能被改变?,6.4.7const的应用:const返回值,2.按值返回内部const常量intf3()return1;constintf4()return1;/返回constint;intmain()constintj=f3();/Worksfineintk=f4();/Butthisworksfinetoo!/:对内部类型来说,按值返回const量并没有什么特别的意义。,6.4.7const的应用:const返回值(续),3.按值返回自定义类型的const:实际上阻止了返回值作为左值出现。classXinti;public:X(intii=0);voidmodify();X:X(intii)i=ii;voidX:modify()i+;,Xf5()Xx(2)returnx;/返回变量constXf6()returnX();/按值返回const;voidf7(X/Error:Why?/:,error2664:cannotconvertparameter1fromconstclassXtoclassX/Error:试图改变值inti=*cip;/OK-copiesvalueint*ip2=cip;/Error:试图让非const*指向const*constint*constw()staticinti;return/返回静态局部量的地址,intmain()intx=0;int*ip=/NotOK/:,当传递一个或返回一个地址时(指针或引用),设置为const可以阻止客户程序员修改其值。,对参数传递而言,C+建议用const引用传递替代值传递。问:有什么好处?答:兼顾了效率和易用性传递地址比传递整个对象更有效;引用传递比指针传递形式上更简单。,作业:,8.5(上机)8.16(上机),6.5const对象与const成员函数,本节讨论const在类中的应用const数据成员const成员函数const对象,6.5.1const数据成员,classFredconstintsize;public:Fred(intsz);voidprint();Fred:Fred(intsz):size(sz)voidFred:print()coutsize=0/:,小结,const能将对象、函数参数、返回值和成员函数定义为常量,还可以进行值替代。const为程序设计提供了又一种非常好的类型检查形式及安全性。const几乎成了程序正确性的“救命稻草”。,作业:,P366(中文版P196):8.24(上机)8.28(提示:参考11.1),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!