C++程序设计 第5篇.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5 章 指针与引用 5.1 动态对象 5.2 引用 返回主目录 5.1 动态对象 5.1.1 动态对象与new、delete运算符 在前面章节的例子中,对象都是自动创建的,程序中定义 的是自定义类型的全局变量或局部的自动变量,对象在进入 其作用域时被创建,在超出其作用域时被销毁。但有一些数 据结构,如链表,在C语言中通常采取动态分配存储空间的 方法,在程序运行过程中调用内存分配函数为链表的结点分 配存储空间。 在C++ 中,一个类的对象也可以动态创建,在程序执行 的过程中分配存储空间。动态对象的使用方法与一般的数据 类型动态创建的方法基本相同,但分配和释放存储空间不再 使用C语言中的malloc 、free等动态内存管理函数,而是使用 C++语言提供的两个运算符new 、delete来实现。下面是一个 简单的程序片断: class Point{ int xVal,yVal; public: Point( ){xVal=yVal=0;} Point(int x, int y){xVal=x; yVal=y;} }; Point *p1,*p2; p1= new Point; p2= new Point(10, 10); ... delete p1; delete p2; 程序片断中定义了两个Point类的指针变量p1 、p2 ,然 后用new运算符后跟类名创建动态对象。与C语言中动态存 储空间分配函数不同的是,new运算符除了分配存储空间之 外,还调用类的构造函数,如果构造函数有参数,则在类 名后将参数传递给构造函数,如上面程序片段中的第二个 new运算符表达式,调用Point类的第二个构造函数构造Point 类对象;如果没有构造函数或构造函数没有参数,则可以 使用上面片断中的第一个new运算符表达式动态构造对象。 如果不能缺省构造,则必须指定对应构造函数的参数以初 始化该动态对象。 与malloc等库函数一样,new运算符操作也可能失败, 可以通过检测返回值是否为0来判断是否失败。 delete运算符用于销毁一个动态对象,除了释放该动态对 象所占用的存储空间之外,还会调用对应类的析构函数。在程 序中决不要忘了销毁动态对象,因为动态对象不会在超出其作 用域时被自动销毁。 new 与delete 运算符也可以用于创建和销毁动态对象数 组,例如: Point *p; p=new Point[5]; //创建动态对象数组 delete [ ]p; //释放动态对象数组 要注意的是,如果Point类没有缺省的不使用参数的构造 方法,上面动态对象数组的构造方式是错误的,在Borland C++3.1编译器中将得到如下的错误信息: Cannot find default constructor to initialize array element of type Point 在使用delete运算符销毁动态对象数组时,在指针变量名 前加[ ]符号表示该指针指向的存储空间是对象数组。早期的 C++语言版本中要求给出数组的大小,目前的C++语言标准中 对此不再要求。在Borland C++3.1编译器中,可以给出数组大 小,但编译器将忽略数组的大小。 new和delete运算符也可以用于一般的数据类型,作用与 malloc和free等库函数的作用相当,下面的str定义是等价的: char * str = (char *)malloc(20) ; char * str = new char[20] ; 在两种情况中,str都被设置为指向内存空间中被动态分 配的20个字符序列的指针,malloc被指定需要分配的字符个 数,返回void 指针,然后将该指针转换为所需要的指针类 型;new接收数据类型作为操作数,表达式的值为该数据类 型的指针,使用new可以避免不必要的数据类型转换。使用 new 、delete方式程序更

文档评论(0)

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

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

1亿VIP精品文档

相关文档