第七讲 运算符重载.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七讲 运算符重载

运算符重载 主要内容 运算符重载目的 运算符重载概述 双目运算符重载 单目运算符重载 其他运算符重载 重载经验与规则 运算符重载概述 运算符是一些系统预定义的函数名称,即用一些特定的符号表示各种运算。每个运算符对运算数据都有一定要求。 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。 运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 运算符函数 定义运算符重载函数的一般格式: type operator @(arg) { ...... //函数体 } type为函数返回值的类型;@为要重载的运算符;arg为函数的形参表, operator是关键字,它与其后的运算符一起构成函数名。 为了提高访问效率,运算符重载函数通常需要直接访问对象的私有或保护的数据成员,因此运算符重载函数通常为类的成员函数或者友元函数。 双目运算符重载 双目运算符 B(成员形式) 如果要重载 B 为类的成员函数,使之能够实现表达式 oprd1 B oprd2,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型。 oprd1 B oprd2 等同于oprd1.operator B(oprd2) 友元形式 此时运算所需的操作数都是通过函数的参数表来传递,在参数表中形参从左到右的顺序就是运算符操作数的顺序。 oprd1 B oprd2 等同于operator B(oprd1,oprd2 ) 单目运算符重载 前置单目运算符 U(成员形式) 如果要重载 U 为类成员函数,使之能够实现表达式 U oprd,其中 oprd 为A类对象,则 U 应被重载为 A 类的成员函数,无形参。经重载后,表达式 U oprd 等同于oprd.operator U() 前置单目运算符 U (友元形式) U oprd 等同于 operator U(oprd ) 前增量与后增量重载 成员形式后增量“++” 和“-- ” oprd为A 类对象,运算符重载函数中要带一个int形参。 oprd++ ? oprd.operator ++ (0) oprd-- ? oprd.operator -- (0) 友元形式后增量“++” 和“-- ” 函数的形参有两个,一个是类的对象,一个是整型形参。 oprd++ ? operator ++ (oprd, 0 ) oprd-- ? operator -- (oprd, 0 ) 前增量与后增量的区别 使用前增量时,对对象(操作数)进行增量修改,然后再返回该对象的引用,参数与返回的是同一个对象。 使用后增量时,必须在增量之前返回原有的对象。后增量操作返回的是原有对象值,不是原有对象,原有对象已经被增量修改。 两种重载形式的比较 对双目运算符而言,成员运算符函数带有一个参数,而友元运算符函数带有两个参数;对单目运算符而言,成员运算符函数不带参数,而友元运算符函数带有一个参数 。 双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但有一种情况必须使用友元函数,如加法运算。 运算符函数调用形式 其他运算符的重载 重载下标运算符[],可增加数组检索的安全性。 重载赋值运算符= 如果没有重载赋值运算符,编译器会为该类产生一个默认的赋值运算符成员函数,其工作方式是按位拷贝。 重载函数调用运算符(),是唯一可带多个右操作数的运算符函数。 类型转换 operator 类型名() 成员与友元运算符函数选取经验 对于单目运算符,建议选择成员函数。 对于运算符“= ()[ ] - ”只能作为成员函数。 对于运算符“ += -= /= *= = != ~= %= = =”,建议重载为成员函数。 对于其他运算符,建议重载为友元函数。 类型转换函数只能定义为

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档