




已阅读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年法学概论考试的结构性学习方法及试题及答案
- 班级环境美化活动的开展与分享计划
- 2024年漳州市交发地产集团有限公司招聘真题
- 课堂作业与反馈管理方案计划
- 探索品牌文化与员工参与度计划
- 2024年上海市高校大学《辅导员》招聘考试题库(含答案)
- 【多旋翼无人机的组装与调试分析6000字(论文)】
- GB/T 43299-2023机动车玻璃电加热性能试验方法
- 人教版八年级物理下册 实验题01 力与运动的实验(含答案详解)
- 商标分割申请书
- 进行性肌营养不良新进展
- 幼儿园故事课件:《狼来了》
- Unit4WhereIsMyShirt-Lesson15(课件)北京版英语二年级下册
- 电力工程隐患隐患排查治理实施方案(三篇)
- 市政工程投资估算编制办法(建标2007164号)
- 大众朗逸2014款说明书
评论
0/150
提交评论