版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章类和动态内存分配、摘要、牙齿章节介绍了类的动态分配技术的使用以及由此产生的问题的处理。动态内存使用是配置函数、分析函数设计和运算符重载、7.1动态内存和类、使用动态内存的示例class string bad private : char * str;/pointer to string int len;/length of string static int num _ strings;/number of objects public : string bad(constchar * s);/constructor string bad();/default constructor s
2、tring bad();/destructor/friend function friendstd 3360: ostream,下面是实现(stringbad.cpp)静态类成员的初始化intstringbad 3360:在类声明中声明无法初始化(静态const整数或枚举除外)。类方法实现文件中初始化。使用类型名称和域限制运算符定义(渡边杏使用关键字static)。然后配置函数string bad :3360 string bad(constchar * s)len=STD 33603360 strlen(s);/set size str=new charlen 1;/allot storag
3、e STD :3360 str cpy(str,s);/initialize pointer num _ strings;/set object count cout num _ strings : str object createdn;Yourinformation的/注意:字符串不存储在对象中,而是位于单独的堆内存中。对象中存储字符串的地址。分析函数string bad : string bad()/necessary destructor cout strobject deleted;/FYI-num _ strings;/required cout num _ strings lef
4、tn;/FYI delete str;/required此处需要结构函数分析。在配置函数过程中,要使用new分配内存,必须在解析函数过程中使用delete释放内存。vegnews.cpp文件是使用上述类的主程序。定义了两个函数。一个是参数,另一个是参数void callme1(StringBad)。1: Celery stalks at midnight object created 23360 lettuce prey object created : spinach leaves bowl for dollars object created headline 11 initialize
5、one Object to another : sailor : spinach leaves bowl for dollars assign one Object to another 3360 : c default Object creater At delete (void *) at stringbad。_ _ dtor(string bad *)in d : temp test 2 strng bad . CPP 3360 line 37 At main C object deleted,-1 left维修,维修,维修,维修_ _ dtor(string bad *)in d :
6、temp test 2 strng bad . CPP 3360 line 37 at _ Void *)atmain()ind : tempt est 2 vee语法分析函数delete语句使用实际参数headline对象的成员headline .释放str牙齿指向的内存,将静态成员数减少1。cout str object deleted-num _ strings;/required cout num _ strings leftn;/FYI delete str;注意:将对象作为实际参数传递给函数时,将通过复制函数中对象的副本来创建临时对象。牙齿函数结束时,临时对象消失,并调用解析函数。
7、,分析器:复制构造函数,渡边杏向程序提供复制构造函数,但使用复制构造函数:初始化具有一个对象的新对象时,StringBad sailor=sportsstring bad sailor(sports);按函数值传递对象或返回对象时,callme 2(headline 2);用于按值依次复制默认复制配置函数,即对象的非静态变量成员。复制副本配置函数原型是stringbad。conststringbad等于sailor.str=sports.str。也就是说,两个指针值相同。也就是说,它指向同一内存。此外,默认复制配置函数不会更改静态成员,因此不会增加数量。附注1:如果类别具有此类静态成员,则建立
8、物件时其值发生变更时,明确复制组态函数附注2:如果类别具有new初始化的指标成员,则提供明确复制组态函数深度复制string bad 33603360 string bad/copy string to new locationKnot=headline1使用以下自动重载的Stringbad默认分配运算符的实现方法与基本副本类似,一个接一个地复制成员,但knot=headline1不会影响静态数据成员:分配运算符执行了以下操作:knot . str=headline 1 . str;还有指向同一内存的两个指针。对象knot的解析函数调用首先执行,释放了指针指向的内存。调用对象headline1
9、的解析函数时,如果尝试释放已释放的内存,则会发生错误。解决牙齿问题的方法是提供“指定”操作符的重载,以创建深副本。重载分配运算符必须具有以下功能:分配的对象在创建时已分配了内存,应在函数使用之前释放。应避免函数自分配。否则,如果在分配值之前执行内存释放操作,对象的内容将破坏。函数返回对对象的引用,因此可以执行连续分配任务。重载运算符包括StringBad、增强的字符串类、复制配置函数和添加赋值运算符所需的功能1。修改默认配置函数:构建空字符串string : string()/default constructorlen=;Str=new char1/为什么不是new char?Str0=0/
10、default string num _ strings;2 .比较成员函数:比较字符串的前后顺序bool operator(const String,比较运算符均设置为欧元,以方便比较c字符串和对象)。例如,name是对象if(“Smith”=name)的Name),另一个构造函数将“Smith”转换为类类型,从而调用函数3。下标运算符重载操作数之一位于括号前面,一个操作数位于两个括号之间。Char,/牙齿方法将stringname (John Smith )分配给对象的特定元素。name 0=J;name 5=S;但是,郑智薰const成员不能用于const对象,因此const函数cons
11、t char、4 .还必须定义静态类成员函数/static function static inthowmany()。/static method int string :3360 how many()return num _ strings;静态类成员函数角色:如果不能通过对象调用,并且只有静态数据成员声明可以公共访问,则可以从作用域运算符调用。int count=string : howmany();5 .添加另一个赋值运算符String。通过牙齿方法,可以使用字符串为对象指定值。6.重新加载输出输入操作符ostream。摘要:组态函数期间使用new、组态函数期间使用new初始化指标成员、
12、使用剖析函数重要事项delete;New和delete必须兼容。如果有多个构造函数,则必须以相同的方式使用new。或者,您可以将指针成员初始化为0。还必须定义复制配置函数(copy construction construction standards),以注意受影响的静态成员的更新。必须定义“指定”操作符以创建深副本。,返回函数返回对象的摘要,返回const对象的引用对象引用是函数参数(),这意味着不复制对象以提高效率,const不可更改。如果实际参数想返回传递函数()的对象,您还可以传递引用以提高效率。Const Vector牙齿可以返回对象,但通过调用复制配置函数降低了效率。Const相
13、当于参数。返回对郑智薰const对象的引用。通常用于重新加载与分配运算符和流对象一起使用的运算符。Ostream Vector step2(38,77):Vector total;Total=step1 step2Step1 step2=totalif(step 1 step 2=step 1)cout step 2=0 解决方法:将operator类型声明为const对象,并且c经常使用指向对象的指针。下面的示例说明了这一点,您可以使用普通指针方法(如(sayings2.cpp) String * shortest=)使用对象指针,稍后使用指针作为if (sayingsi.length()
14、length()或ClassName牙齿类,然后调用配置函数className(typeName)牙齿。例如,string * PST=new string( hello );调用String(const char * s)牙齿。String * PST=new String默认构造函数函数String();在特殊情况下,string * favorite=new string(sayings choice);给定参数以这种类型的名称调用复制配置函数string(conststring/copy constructor),分析结构函数中的牙齿空间string : string(constchar * s)/copy constructor/allot storage STD :3360 str cpy(str,s);/initialize pointer num _ stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国结直肠癌诊疗规范重点2026
- 公厕维修改造工程施工方案设计
- 滨海广场铝板幕墙安装工程技术交底大全
- 中国基础教育改革深度分析报告(2026年):从政策文本到实践落地的系统性变革
- 2025年中国质量协会QC小组活动专业能力(初级)综合能力测试题及答案四
- 发光字施工方案
- 法制教育活动学习心得感悟范文5篇
- 乘用车企业激光落料加工配送规范(征求意见稿)
- 场址最大可信地震动评估导则-随机有限断层法征求意见稿
- 人教版九年级上册数学25.2用列举法求概率课件
- 《甘肃省自然村(组)通硬化路建设技术指南》
- 劳动课制作风筝课件
- 高标农田建设标准劳务分包合同
- 中国近现代史纲要之第六章-新
- MOOC 管理学原理-武汉理工大学 中国大学慕课答案
- 5G华为优化中级认证考试题库(浓缩500题)
- AI技术对教育的影响
- 以就业为导向的技工院校人才培养模式
- 2019年12月大学英语三级(A级)真题试卷(题后含答案及解析)
- EPC总承包项目采购方案
- 压花艺术课件
评论
0/150
提交评论