面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第1页
面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第2页
面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第3页
面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第4页
面向对象程序设计》中国科学技术大学计算机系马建辉.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

* 1 第六章 类成员(二) 面向对象程序设计(C+) * 2 6 类成员(二) 6.1 成员变量与成员函数 6.2 this指针 6.3 成员对象 6.4 const(常量) 6.5 const对象与const成员函数 6.6 静态成员变量与静态成员函数 * 3 6.4 const量(常量) 从高质量程序设计的角度考察C+中的const! * 4 6.4.1 const的意义 F最低权限原则: 软件工程的基本原则之一。 const的意义: 在可更改与不可更改之间画一条 明确的界线,提高程序的安全性和可控性。 eg: const int i=100; i+; /编译错误 * 5 6.4.2 C中的const(常量) F“一个不能被改变的普通变量”。 F因此: - 总是占用存储; - 名字是全局的。也就是说,默认情况下,const是 外部连接的(容易引起“名字冲突”)。 const int bufsize; / 无需初始化 const int bufsize = 100 ; char bufbufsize ; / error! Why? 在编译时,编译器并不知道const的值,它只是一 个“运行时常量”。 * 6 6.4.3 C+的Const F通常,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在另一个文件 中定义及赋初值。 * 7 6.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() /: * 8 6.4.4 C+中const的作用 G值替代: C+的const vs C中的宏替换 #define BUFSIZE 100; / 宏替换 char strBUFSIZE; vs const int bufsize = 100; / C+的const char strbufsize; L在宏替换中,BUFSIZE没有类型信息,不能进行类型检查; L宏定义是全局的,容易名字冲突。 * 9 6.4.4 C+中const的作用(续) A 安全性 如果想用运行期间产生的值初始化一个变量,并且 知道在该变量的生命期内其值不变,则可用const限定该 变量,达到最大限度地保证改变量安全性的目的。 int main() cout = 0 n return quoteslastquote = qnum; n nint main() n Quoter q; n const Quoter cq; n cq.lastQuote(); / OK n/! cq.quote(); / Not OK; non const function n for(int i = 0; i 20; i+) n cout q.quote() endl; n /: * 30 小结 Fconst能将对象、函数参数、返回值和成员函数定 义为常量,还可以进行值替代。 Fconst为程序设计提供了又一种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论