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

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

ID:40008514

大小:301.81 KB

页数:31页

时间:2019-07-17

《面向对象程序设计》中国科学技术大学计算机系马建辉_第1页
《面向对象程序设计》中国科学技术大学计算机系马建辉_第2页
《面向对象程序设计》中国科学技术大学计算机系马建辉_第3页
《面向对象程序设计》中国科学技术大学计算机系马建辉_第4页
《面向对象程序设计》中国科学技术大学计算机系马建辉_第5页
资源描述:

《《面向对象程序设计》中国科学技术大学计算机系马建辉》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第六章类成员(二)面向对象程序设计(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(常量)“一个不能被改变的普通变量”。因此:--总是占用存储;--

2、名字是全局的。也就是说,默认情况下,const是外部连接的(容易引起“名字冲突”)。constintbufsize;//无需初始化constintbufsize=100;charbuf[bufsize];//error!!Why??在编译时,编译器并不知道const的值,它只是一个“运行时常量”。6.4.3C++的Const通常,C++编译器不为const创建存储空间,而是把它保存在“符号表”里,即“编译时常量”。constintbufsize;//非法,未赋初值constintbufsize=100;charstrbuf[bufsize];//OK,Why?默认情况下,

3、C++中的const是内部连接的,也就是说,const仅在const被定义过的文件里才是可见的。(因此,不用担心名字冲突)当定义一个const时,必须赋一个值给它,除非用extern做出了清楚的说明。当用extern说明了const时,编译器会强制为const分配空间,而不是保存在符号表中。externconstintbufsize;//未赋初值,但extern声明了bufsize在另一个文件中定义及赋初值。6.4.3C++的Const(续)const用于集合,必须为其分配内存,(因为编译器“不愿意”把集合保存到符号表中,太复杂)。constinti[]={1,2,3,4

4、};floatf[i[3]];//非法,编译期间无法知道存储空间的值。structS{inti,j;};constSs[]={{1,2},{3,4}};doubled[s[1].j];//非法,理由同上intmain(){}///:~6.4.4C++中const的作用值替代:C++的constvsC中的宏替换#defineBUFSIZE100;//宏替换charstr[BUFSIZE];vsconstintbufsize=100;//C++的constcharstr[bufsize];在宏替换中,BUFSIZE没有类型信息,不能进行类型检查;宏定义是全局的,容易名字冲突。

5、6.4.4C++中const的作用(续)安全性如果想用运行期间产生的值初始化一个变量,并且知道在该变量的生命期内其值不变,则可用const限定该变量,达到最大限度地保证改变量安全性的目的。intmain(){cout<<"typeacharacter&CR:";constcharc=cin.get();//用运行期间产生的值初始化,之后不变constcharc2=c+'a';cout<

6、const*v;//v是一个指向恰好是const的int的普通指针;2.const指针(指针的值不能改变)constintd=1;int*constw=&d;//w是一个指针,这个指针是指向int的const指针注意:C++中,const指针必须赋初值6.4.5const的应用:const指针(续)3.const指针指向const对象intd=1;constint*constx=&d;intconst*constx2=&d;//x,x2,*x,*x2都不能改变非const对象的地址可以赋给const指针;const对象的地址绝不可以赋给非const指针。(因为这样做可能导

7、致通过非const指针改变const对象的值的后果)intd=1;constinte=2;int*u=&d;//OK--dnotconst//!int*v=&e;//illegal--econstint*w=(int*)&e;//legalbutbadpracticeintmain(){}///:~注意6.4.6const的应用:const参数1.传递const值voidf1(constinti){i++;//编译时错误,i不能改变}“形参”不能被改变or“实参”不能被改变???6.4.7const的应用:const返回值2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。