- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.1 动 态 对 象 5.2 引 用 现在可以像数组下标运算符一样给下标运算表达式赋值,例如: Vect v(10, 10); v[x]=20; v[y]=30; 上面的程序中定义了一个静态的整型变量dummy,目的是防止在调用下标运算符时传入非法的字符串。要注意,如果不将其说明为静态变量,则程序将可能发生意想不到的错误。例如计算下面的表达式: v[z]=10; 实际上是给局部变量dummy赋值,而如果dummy说明为自动变量,则在退出该函数时,dummy变量所占用的空间已经被释放,此时给其赋值将产生意想不到的结果。所以在使用引用返回值时,应注意不能返回局部自动变量的引用,编译器不能检测该错误。 5.2.5 对象的复制 C++程序在执行过程中有时会将一个对象复制到另一个对象。将一个对象赋值给另一个对象,此时第一个对象被拷贝到第二个对象中,或者在对象定义时,使用同类对象作为初值来创建和初始化一个对象。下面的片断中将对象b的值复制到对象a,对象d的值复制到对象c。 Point a,b,d; Point c=d; ... a=b; 另外,当对象作为参数传递给函数时,或从函数返回一个对象时同样会发生对象的复制。在缺省的情况下,C++采取位复制的方式来完成对象的复制,即将被复制对象所占用的存储空间的内容原样复制到目标对象中去。位复制方式对一些特殊的类将会产生错误,试看下面的例子: #include iostream.h #include string.h class StringClass{ char * str; public: StringClass(char *s); ~StringClass( ); Print( ){coutstr\n;} }; StringClass::StringClass(char *s) { str=(char *)malloc(strlen(s)+1); strcpy(str,s); } StringClass::~StringClass( ) { free(str); } void main( ) { StringClass s1(Test); StringClass s2=s1; s1.Print( ); s2.Print( ); } 该程序定义了一个StringClass类,包含一个指针类型的数据成员,在构造函数中分配存储空间,然后在析构函数中释放这部分存储空间。主程序中定义了一个对象s1,然后用s1初始化对象s2。 由于采取位复制方式,因此对象s1和s2的成员str的值相同。指向相同的存储空间。当主程序结束运行时,对象s1和s2被分别调用析构函数,str所指向的存储空间将被两次调用free函数来释放。 同样类似的问题也会出现在赋值运算和函数参数或返回值的使用上,例如下面的函数: StringClass NewString(char * s) { StringClass s1(s); return s1; } * 第 5 章 指针与引用 5.1 动态对象 5.2 引用 返回主目录 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
您可能关注的文档
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第6章 继承与多态性.ppt
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第6章任务重点代码.doc
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第7章任务重点代码.doc
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第8章windows 相关控件.ppt
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第9章 使用ADO.net 进行数据库编程.ppt
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第9章任务重点代码.doc
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第10章 文件IO操作.ppt
- C#应用程序设计 教学课件 作者 韦鹏程 张伟 朱盈贤 第10章任务重点代码.doc
- C#应用程序设计教程 教学课件 作者 耿肇英 耿燚 第1章 C#语言基础.ppt
- C#应用程序设计教程 教学课件 作者 耿肇英 耿燚 第2章Windows编程的基础知识.ppt
- 医疗美容行业消费者心理分析与服务质量监控策略报告.docx
- 特岗教师考前冲刺测试卷附参考答案详解(A卷).docx
- 城市生活垃圾分类处理产业链现状与2025年投资前景分析报告.docx
- 特岗教师考前冲刺测试卷附参考答案详解(培优).docx
- 陕西省安康市七校2024-2025学年高二下学期7月期末联考语文试卷(含答案).pdf
- 特岗教师考前冲刺测试卷附参考答案详解(综合题).docx
- 2025年跨境电商箱包服饰品牌推广广告投放策略.docx
- 2025年零售私域流量运营社群营销策略研究报告.docx
- 乡村特色农产品跨境冷链物流园区2025年冷链物流技术创新研究报告.docx
- 乡村特色农产品电商直播营销策略与品牌影响力提升报告.docx
文档评论(0)