网站大量收购闲置独家精品文档,联系QQ:2885784924

《C++程序设计》课件第3章.pptVIP

  1. 1、本文档共106页,可阅读全部内容。
  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文档。上传文档
查看更多

这样就不会再出现内存越界了。注意,字符串后面有个“\0”作为结束符,分配内存时不要忘记为它分配内存。3)忘记释放内存,造成内存泄露当使用了malloc或new后没有用free或delete来释放内存,含有这种错误的函数每被调用一次都会丢掉一块内存。运行时间长了,会发现机子越来越慢,最后程序卡死,系统提示:内存耗尽。因此,内存泄露的后果是很严重的,应保证malloc和free的次数一样多。new和delete同理。4)释放了内存,却继续使用程序中返回了一个栈上的指针,当跳出那个函数时,栈上的空间被释放。也就是说,返回的那个指针指向的东西是未知的。例如:#includeiostreamusingnamespacestd;char*GetString(void){ charp[]=helloworld; returnp; //编译器将提出警告}voidTest(void){ char*str=NULL; str=GetString(); //str的内容是未知的 coutstrendl;}voidmain(){ Test();}运行后发现屏幕上打印的并不是helloworld,而是几个奇怪的字符。原因在“returnp;”这句代码。因为p数组是在栈上分配的,所以当程序离开GetString时,p的内存被自动释放。在Test中,str虽然不为NULL,但是它指向的内容是未知的,因为那片空间是在栈上,空间已被释放。因此,平时写程序时不要返回“栈指针”。要注意的是当释放了内存后,那个指针的值没有变,但是指针指向的内容已经是无用的,如果再引用就会出错。例如: char*c=(char*)malloc(7); strcpy(c,Hello!); coutcendl; free(c); cout(int)cendl;运行结果如下:当c被free掉后,指针的值还是原来那个值,只是内容是无用的。所以在释放内存后最好将指针置为NULL,这样那个指针就不会是“野指针”了。管理好内存会使程序健壮而稳定。所以在编写程序时一定要做好内存管理。本章小结C++细致精巧的机制说明了正确地初始化和清除的重要性。我们从C语言中得到启示,一些程序的问题在很大程度上是由于没有适当的初始化变量所引起的,类似的问题也会出现在变量的清除上。构造函数和析构函数可以保证我们能够进行正确的初始化和清除。虽然C语言的动态可以从堆上获得空间,但是它们在C++里不易使用而且容易出现问题。使用new和delete进行动态的内存分配已经成为语言的核心,它可以让我们很容易在堆上创建对象,增加了程序的灵活性。编程技巧与注意事项:(1)一个构造函数描述这个类的对象/变量如何被初始化;(2)如果在构造函数里申请了某些资源,在析构函数里一定要释放它;(3)如果在一个类里有指针成员,它就需要有复制操作;(4)注意浅拷贝和深拷贝的区别,避免浅拷贝的隐患;(5)在复制赋值时需要检查自我复制;(6)在向某个类中添加新成员时,一定要仔细检查,看是否有用户需要更新的构造函数,以确保新成员的初始化;(7)?delete只能用来删除通过new申请的空间,不能是C的库函数malloc申请的空间;(8)?new并不总是分配成功的;(9)需要时我们可以实现自己的new和delete(详见第4章new和delete的重载)。习题3.1以面向对象的概念设计一个类,此类包含3个私有数据:unlead(无铅汽油)、lead(有铅汽油)和total(当天总收入)。无铅汽油的价格是18元/升,有铅汽油的价格是17元/升。请以构造函数的方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。3.2编写一个程序,采用一个类n!,并输出5!?的值。3.3编写一个类,实现简单的栈。栈中有以下操作:元素入栈,读出栈顶元素值,退出栈,判断栈顶是否为空。如果栈溢出,程序

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档