已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作符重载,重载就是相同的名称或符号具有不同的意义。重载:函数重载和操作符重载。操作符重载有两种形式:类的成员函数方式和顶层函数方式6.1基本操作符重载操作符有一元操作符和二元操作符。下列操作符不能被重载:成员选择符(.)、成员对象选择符(.*)、域解析操作符(:)和条件操作符(?:)。赋值操作符()不能被派生类所继承。下标操作符、赋值操作符=、函数调用操作符()和指针操作符-必须以类的成员函数的形式进行重载,classCpublic:Coperator+(constC,例子:一元操作符!和二元操作符classCpublic:C,6.1.1操作符的优先级和语法重载不能改变操作符的优先级和语法。如果一个内建操作符是一元的,那么所有对它的重载仍是一元的。如果一个内建操作符是二元的,那么所有对它的重载仍是二元的。classCpublic:Coperator%();,6.2示例程序:复数类要求:1。重载+、*和/,以支持复数的算术运算2。设计一个write函数,以输出一个复数至标准输出3。设计默认构造函数,将实部和虚部设为零4。设计拥有一个参数的构造函数,将实部设为该参数,虚部设为零5。设计拥有两个参数的构造函数,将两个参数分别赋给实部和虚部。,Complex类的实现classComplexpublic:Complex();/defaultComplex(double);/realgivenComplex(double,double);/bothgivenvoidwrite()const;/operatormethodsComplexoperator+(constComplex,/defaultconstructorComplex:Complex()real=imag=0.0;/constructor-realgivenbutnotimagComplex:Complex(doublere)real=re;imag=0.0;/constructor-realandimaggivenComplex:Complex(doublere,doubleim)real=re;imag=im;voidComplex:write()constcoutreal+imagi;,/Complex+asbinaryoperatorComplexComplex:operator+(constComplex,/Complex*asbinaryoperatorComplexComplex:operator*(constComplex,intmain()Complexc1(7.7,5.5);Complexc2(4.2,-8.3);Complexc3;c3=c1+c2;coutc1+c2=;c3.write();coutn;c3=c1-c2;coutc1-c2=;,c3.write();coutn;c3=c1*c2;coutc1*c2=;c3.write();coutn;c3=c1/c2;coutc1/c2=;c3.write();coutn;return0;,6.3用顶层函数进行操作符重载除了内存管理操作符new、new、delete和delete之外,一个以顶层函数形式被重载的操作符必须在它的参数列表中包含一个类的对象。定义方式:Coperator+(constC,/*ERROR:neitheramethodnora/afunctionthattakesaclassargumentfloatoperator+(floatf1,floatf2)return(f1*f1+f2*f2);/*ERROR:mustbeoverloadedasamethodvoidoperator(inti,PointVector3D(doublea,doubleb,doublec)x=a;y=b;z=c;Vector3Doperator*(intn)returnVector3D(n*x,n*y,n*z);private:doublex,y,z;Vector3Dv1,v2(1.0,2.0,3.0);v1=v2*9;v1=9*v2;,2.操作符重载(顶层函数方式)classVector3Dpublic:Vector3D()x=y=z=0.0;Vector3D(doublea,doubleb,doublec)x=a;y=b;z=c;doublegetX()constreturnx;doublegetY()constreturny;doublegetZ()constreturnz;private:doublex,y,z;,Vector3Doperator*(intn,constVector3D,下面看这个代码的问题:Complexoperator+(constComplex,解决方案:1.将real和imag设计成Complex类的公有成员2.在Complex类中加入用于访问real和imag的公有成员函数3.将operator+声明为Complex类的friend。classComplexpublic:Complex();Complex(double);Complex(double,double);voidwrite()const;,doubleget_real()constreturnreal;doubleget_imag()constreturnimag;private:doublereal;doubleimag;Complexoperator+(constComplex,Complexoperator-(constComplex,Complexoperator/(constComplex,6.4friend函数(友元函数)friend函数可以访问类的任何成员(public、protected、private)classC/.friendintf();/friendfunction友元函数friendclassB;/friendclass友元类/.;,例子:classComplexpublic:Complex();Complex(double);Complex(double,double);voidwrite()const;friendComplexoperator+(constComplex,Complexoperator+(constComplex,Complexoperator*(constComplex,6.5输入与输出操作符的重载用顶层函数来实现输入、输出流操作符重载。istream,6.6赋值操作符的重载拷贝构造函数和赋值操作符都是用来拷贝一个类的对象给另一个同类型的对象。拷贝构造函数将一个对象拷贝到另一个新的对象;赋值操作符将一个对象拷贝到另一个已经存在的对象。如果类的设计者没有提供拷贝构造函数,也没有重载赋值操作符,编译器将会为这个类提供一个拷贝构造函数和一个赋值操作符。需要注意的问题就是和拷贝构造函数同样的问题,编译器提供的运作机制的特点以及引起的问题。,#include#includeusingnamespacestd;classCNameListpublic:CNameList(void):size(0),p(0);CNameList(conststring,int);CNameList(constCNameList,voidset(conststring,CNameList:CNameList(void)CNameList:CNameList(conststrings,intsi)p=newstringsize=si;for(inti=0;isize;i+)pi=si;,CNameList:CNameList(constCNameList,voidCNameList:copyIntoP(constCNameList,intmain()stringlist=Lab,Zhihua,Song;CNameListn1(list,3);n1.dump();CNameListn2=n1;n2.dump();n2.set(“GreatDane”,1);n2.dump();n1.dump();return0;,6.7特殊操作符的重载下标操作符、自增操作符+、自减操作符-等。,6.7.1下标操作符的重载classCreturntype,classintArraypublic:int,int,intArray:intArray(ints)trya=newints;catch(bad_alloc)cerr=60)m_nMinute=m_nMinute-60;m_nHour+;m_nHour=m_nHour%24;return*this;,/后置单目运算符重载/注意形参表中的整型参数ClockClock:operator+(int)Clockold=*this;+(*this);returnold;voidClock:ShowTime()coutm_nHour“:”m_nMinute“:”m_nSecondn;,intmain()ClockmyClock(23,59,59);coutFirsttimeoutput:;myClock.ShowTime();coutShowmyClock+:;(myClock+).ShowTime();coutShow+myClock:;(+myClock).ShowTime();return0;,6.9内存管理操作符new,new,delete,delete两种方式:void*C:operatornew(size_tsize)/和void*operatornew
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场安全设备选型与采购
- 特殊动词时态变化汇编
- 玻璃幕墙施工安全风险管控方案
- 教学设计质量标准与评估体系
- 大型停车场施工总体规划与实施方案
- 病理生理学章节要点总结
- 银行贷款风险评估与控制流程
- 餐饮行业成本控制管理规范
- 2025现代家居服务行业市场供需动态投资评估规划全面研究报告
- 2025现代农业产业市场供需分析投资前景规划研究报告
- 奔驰汽车自我介绍
- 2025~2026学年山东省德州市高二上学期九校联考英语试卷
- 保密法实施条例培训课件
- 第24课《寓言四则》课件2025-2026学年统编版语文七年级上册
- 2025年超星尔雅学习通《政治理论与实践案例分析》考试备考题库及答案解析
- 2026届上海市高考一模英语模拟试卷试题及答案
- 动力电池热管理系统设计指南-2025
- 墓地购置协议书范本
- 《无人机组装与调试》试卷与参考答案(两套)
- 小学生病毒科普
- 国家开放大学电大本科【国际私法】2025年期末试题及答案
评论
0/150
提交评论