运算符(operator)重载.ppt_第1页
运算符(operator)重载.ppt_第2页
运算符(operator)重载.ppt_第3页
运算符(operator)重载.ppt_第4页
运算符(operator)重载.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章 运算符(operator)重载 什么是运算符重载 运算符重载的基本方法 运算符重载的一般规则 用成员函数重载运算符 用友元函数重载运算符 算术运算符、关系运算符的重载 1. 什么是运算符重载 (1)问题的提出:在前面的章节中,我们学习了基本数 据类型和运算符的有关内容,知道3+19、84.7-23.8 等式子是成立的。 假设已定义了日期类Date,复数类Complex 现在定义几个对象: Date d1(2008,10,1),d2(2010,11,12); Complex c1(3,4), c2(4,-5); 问题: (1)能否用 d2-d1 求出2008年国庆距离2010年广州 亚运会(第16届)开幕的天数? (2)能否用 c1+c2 求出两个复数之和? 回答是否定的! 事实上,C+预定义的+、-、*、/、=、=、(右移) C+允许重载的运算符:(续) 赋值运算符:=、+=、-=、*=、/=、%=、|=、&= 、=、= 空间申请与释放运算符:new、delete、new、 delete 其它运算符:( )(函数调用)、-(成员访问)、-*(成 员指针访问)、,(逗号)、 (下标) 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) : (域运算符) sizeof(长度运算符) ? :(条件运算符) 重载不能改变运算符操作数的个数、优先级和结合 性; 重载运算符的函数不能有默认的参数; 重载运算符必须和用户自定义类型的对象一起使用 ,其参数至少有一个是类对象或对象引用; 应当使重载运算符的功能类似于该运算符作用于标 准数据类型时所实现的功能; 对于运算符:=(对象赋值)和 &(取对象地址)的 功能,系统已有默认定义,通常情况用户不需要重 新定义。只有当对象间赋值涉及动态分配的指针, 有可能出现多个对象的指针指向同一位置时,用户 才需要自己重新定义。 4 . 用成员函数重载运算符 主要是把握成员函数的类内声明、类外定义和 函数调用等几个关键点: (1)运算符函数(即成员函数)的类内声明格式: 函数类型 operator 运算符(形参表); 函数类型 类名:operator 运算符(形参表) /对运算符的重载处理 (2)运算符函数(即成员函数)的类外定义格式: (3)运算符函数(即成员函数)的调用形式: 对象.operator 运算符(实参表); 或 对象 运算符 操作数 /这种形式更常用 说明: 总是默认调用该成员函数的对象参与了其中的运算 ,因此,运算符函数隐含了一个参数,即this指针 ,它指向当前对象。所以,运算符函数的参数个数 要比操作数的个数少一个,即双目运算符仅有一个 参数,单目运算符无参数。请务必牢记这一点。 说明: (续) 如果重载的运算符函数允许有参数,那么对该参数 的类型并没有严格限定,既可以是自定义类型,也 可以是基本数据类型。函数返回值类型的确定也是 类似的; 运算符函数的调用方式有两种,一种是普通成员函 数的调用方式,另一种是表达式的形式,但后一种 方式更直观,更常用; 为了能在类外使用运算符表达式,通常把运算符函 数设为public权限; =、()、-等运算符只能用成员函数重载。 设 a+bi 和 c+di 是两个复数,则它们的四则运 规则如下: 例7-1 使用成员函数方法重载“+”、“*”运算符 5. 用友元函数重载运算符 友元函数作为被访问类的“好友”,它也有权访问 被访问类的私有成员,因此,也可以用友元函数来 重载运算符。 用友元函数方法重载运算符与上一节介绍的用成 员函数方法重载运算符相比, 相同点:调用方式一样,即: 操作数1 运算符 操作数2 (至少有一个操作数) 不同点:由于友元函数不属于类的成员,不存在当前 对象参与运算的问题,因此,该运算符函数的参数 个数与操作数的个数一样多。 友元函数声明、定义、调用格式如下: (1)运算符函数(即友元函数 )的类内声明格式: friend 函数类型 operator 运算符(形参表); /参数个数为一个或两个,不可能为空 /在函数名前不能加 类名和:符号 函数类型 operator 运算符(形参表) /对运算符的重载处理 (2)运算符函数(即友元函数)的类外定义格式: (3)运算符函数(即友元函数)调用的基本形式 : 操作数1 运算符 操作数2 /单目运算符只有一个操作数,+、-还有前缀、后缀之分 说明: 运算符函数参数的个数与操作数的个数相同,即双 目运算符有两个参数,单目运算符只有一个参数, 这一点很重要,再次强调一下; 运算符的使用只能采用:操作数1 运算符 操作数2 的基本形式,不允许像上一节那样写成 对象.成员函数(实参表) 形式。 说明: (续) 插入运算符()只能用友元 函数方法进行重载。 例7-2 使用友元函数方法重载“-”、“/”运算符 本讲小结 什么是运算符重载; 运算符重载的实质就是运算符函数重载,运算符函 数,重载的两

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论