面向对象技术(CPrimer)第4章.pptVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象技术(CPrimer)第4章

25.我们使用指针来修改其所指对象的值。但如果指针指向const对象,则不允许用指针 来改变其所指的const值。为了保证这个特性,C++强制要求指向const对象的指针必须具有const特性。 这里的cptr是一个指向double类型的const对象的指针。Const限定了cptr指针所指向的对象的类型,而非cptr本身。Cptr本身并不是const的。在定义时不需要对它进行初始化。允许给cptr重新赋值,使其指向另一个const对象。但不能通过cptr修改其所指对象的值。 把一个const对象的地址赋给一个普通的,非const对象的指针也会导致编译时错误。另外,不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址。允许把非const对象的地址赋给指向const对象的指针。但不允许用const指针改变非const对象的值。因为cptr一经定义,就不允许修改其所指对象的值。如果该指针恰好指向非const对象,同样要遵循这个原则。尽管不能用const指针修改一个非const对象的值,但这个非const对象的值可通过非const指针修改,导致的结果是,const指针所指向对象的值被修改了。也就是说,不能保证指向const的指针所指向对象的值一定不可修改。如果把指向const对象的指针理解为“自以为指向const的指针”,可能对理解有所帮助。实际应用中,指向const的指针常用作函数的形参。将形参定义为指向const的指针,以确保传递给函数的实际对象在函数中不因为形参而被修改。 26.我们可以从右向左把上述定义读作curErr是指向int型对象的const指针。与其他const量一样,const指针的值不能修改。也就是说,不能使curErr指向其他对象。任何企衅给const指针赋值的行为会出错。与任何const量一样,const指针必须在定义时初始化。指针本身是const的事实并没有说明是否能使用该指针修改它所指向的对象的值。指针所指对象的值能否修改完全取决于该对象的类型。如果它指向一个非const的int对象,可使用它修改该对象的值。 指向const对象的const指针,既不能修改pi_ptr所指向对象的值,也不允许修改该指针的指向。 27.在typedef中使用指针往往会带来意外的结果。下面是一个几乎所有人都会答错的问题。 简单的回答是const pstring类型的指针。进一步问,const pstring 指针所表示的真实类型是什么? Const string *cstr;即,const pstring是一种指针,是指向string类型的const对象的指针。但这是错误的。 错误的原因在于将typedef当做文本扩展了。声明const pstring时,const修饰的是pstring的类型,而pstring是一个指针。因此,该声明语句应是把cstr定义为指向string类型的对象的const指针。它等价于: 28.尽管C++支持C风格的字符串,但不应该在C++程序中使用这个类型。C风格字符串常会带来很多错误,是导致大量安全问题的要源。字符串字面值类型其实是const char类型的数组。C++从C语言中继承下来的一种通用的结构是C风格字符串。字符串字面值是该类型的实例。它既不能归结为C语言类型,也不能归结为C++类型,而是以空字符null结束的字符数组。Ca1,cp1都 不是C风格字符串。其他的都是,都是以null结尾的。C++语言通过const char*类型指针来操纵C风格字符串。我们使用指针的算术操作来遍历C风格字符串。 29.cstring是string.h头文件的C++版本。而string.h是C语言提供的标准库。传递给这些标准库函数例程的指针必须具有非零值,并且指向以null结束的字符数组中的第一个元素。其中一些标准库函数会修改传递给它的字符串,这些函数假定它们所修改的字符串具有足够大的空间接收本函数新生成的字符,程序员必须确保目标字符串足够大。 总的来说,对大部分应用而言,使用标准库类型string,除了增强安全性外,效率也提高了,因此,应该尽量避免使用C风格字符串。 30.数组类型有三个重要限制:实际的应用程序往往不能忍受这样的限制,它们需要在运行时动态分配数组。虽然数组长度是固定定的,但是。 每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C语言用一对标准库函数malloc和free在自由存储区中分配存储空间,C++用new和delete实现相同的功能。 31.New表达式返回指向新分配数组的第一个元素的指针。New表达式需要指定指针类型及在方括号中给出的数组维数,

您可能关注的文档

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档