资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
*1第六章 类成员(二)面向对象程序设计(C+)*26 类成员(二)6.1 成员变量与成员函数 6.2 this指针 6.3 成员对象 6.4 const(常量) 6.5 const对象与const成员函数 6.6 静态成员变量与静态成员函数*36.4 const量(常量)从高质量程序设计的角度考察C+中的const!*46.4.1 const的意义F最低权限原则: 软件工程的基本原则之一。const的意义: 在可更改与不可更改之间画一条 明确的界线,提高程序的安全性和可控性。eg:const int i=100;i+; /编译错误*56.4.2 C中的const(常量)F“一个不能被改变的普通变量”。 F因此:- 总是占用存储;- 名字是全局的。也就是说,默认情况下,const是 外部连接的(容易引起“名字冲突”)。const int bufsize; / 无需初始化const int bufsize = 100 ;char bufbufsize ; / error! Why?在编译时,编译器并不知道const的值,它只是一 个“运行时常量”。*66.4.3 C+的ConstF通常,C+编译器不为const创建存储空间,而是把它保存 在“符号表”里,即“编译时常量”。const int bufsize; / 非法,未赋初值const int bufsize = 100;char strbufbufsize; / OK, Why?F默认情况下,C+中的const是内部连接的,也就是说, const仅在const被定义过的文件里才是可见的。(因此, 不用担心名字冲突)F当定义一个const时,必须赋一个值给它,除非用extern 做出了清楚的说明。当用extern说明了const时,编译器 会强制为const分配空间,而不是保存在符号表中。extern const int bufsize; / 未赋初值,但extern声 明了bufsize在另一个文件中定义及赋初值。*76.4.3 C+的Const(续)Fconst用于集合,必须为其分配内存,(因为编译器“不 愿意”把集合保存到符号表中,太复杂)。const int i = 1, 2, 3, 4 ;float fi3; / 非法,编译期间无法知道存储空间的值 。struct S int i, j; ;const S s = 1, 2 , 3, 4 ;double ds1.j; / 非法,理由同上int main() /: *86.4.4 C+中const的作用G值替代: C+的const vs C中的宏替换 #define BUFSIZE 100; / 宏替换char strBUFSIZE;vsconst int bufsize = 100; / C+的constchar strbufsize; L在宏替换中,BUFSIZE没有类型信息,不能进行类型检查;L宏定义是全局的,容易名字冲突。*96.4.4 C+中const的作用(续)A 安全性如果想用运行期间产生的值初始化一个变量,并且 知道在该变量的生命期内其值不变,则可用const限定该 变量,达到最大限度地保证改变量安全性的目的。int main() cout = 0 n return quoteslastquote = qnum;nnint main() n Quoter q;n const Quoter cq;n cq.lastQuote(); / OKn/! cq.quote(); / Not OK; non const functionn for(int i = 0; i 20; i+)n cout q.quote() endl;n /:*30小结Fconst能将对象、函数参数、返回值和成员函数定 义为常量,还可以进行值替代。Fconst为程序设计提供了又一种非常好的类型检查 形式及安全性。Fconst几乎成了程序正确性的“救命稻草”。*31作业:P366(中文版P196): 8.24(上机) 8.28(提示:参考11.1)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号