第6讲 操作符重载.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 操作符重载 C++语言提供的标准运算符可以在类中重新定义的机制——运算符重载。 例:一个表达式 A - ( B + C ) 可以表达 Sub ( A, Add ( B, C ) ) 或 operator - ( A, operator + ( B, C ) ) C++中可被重载的操作符 + - * / % ^ | ~ ! = += -= *= /= %= ^= = | = = = = = != = = || ++ -- [ ] ( ) - -* , new new[ ] delete delete[ ] 编程者只能从上述运算符中选择进行重载的运算符,不能再定义新的运算符。 C++中不能被重载的操作符 成员选择符(.) 成员对象选择符(. * ) 域解析操作符(: :) 条件操作符( ? :) 除了赋值操作符(=)之外,基类中所有被重载的操作符都将被派生类继承。 重载为类的成员函数 以一个complex类为例介绍重载操作符为类成员函数的方法。 例:语句a=b+c等同于:   a=b.operator + ( c ) 意义:将C对象b和c加起来,得到另一个C对象,并将它赋给C对象a。 重载为类的成员函数 C的成员函数只有一个参数,但是+操作符需要两个操作数。实际上,第一个操作数就是调用该函数的对象。 在语句a = b +c中,b的成员函数operator+被调用,等同于:  a=b.operator + ( c ) 重载操作符函数时参数要求: 对于一元操作符函数: 重载为成员函数时,不能再显式声明参数。 对于二元操作符函数: 重载为成员函数时,只能显式声明一个形参,这个形参表示右操作数,左操作数由引用参数提供。 重载一元和二元操作符的例子 对有序数对进行封装的例子 对操作符==进行重载,当且仅当数据成员p1和p2分别相等时,两个OPair对象相等 S1==S2 等同于 S1.operator==(S2) 重载操作符要注意的问题: 对操作符的重载不改变操作符的优先级和结合性。 重载不改变操作符的语法。例如: 重载操作符要注意的问题: 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的。 如果一个内建操作符是二元的,那么所有对它的重载仍是二元的。 示例程序:复数类 要求实现一个表示复数的类,并且完成以下操作: 重载+、-、*和/,以支持复数的算术运算。 设计一个write函数,以输出一个复数至标准输出。 设计默认构造函数,将实部和虚部设为零。 设计拥有一个参数的构造函数,将实部设为该参数,将虚部设为零。 设计拥有两个参数的构造函数,并将两个参数分别赋给实部和虚部。 示例程序:复数类 复数的算术运算定义: 示例程序:复数类 p219 用顶层函数进行操作符重载 一个被重载的操作符,就是一个用户自定义的函数,只不过它可以享有操作符语法所带来的便利。 一般来说,被重载的操作符要么是类成员函数,要么就是顶层函数。 用顶层函数进行操作符重载 除了内存管理操作符new 、new[ ] 、delete 和delete[] 之外,一个以顶层函数形式被重载的操作符必须在它的参数表中包含一个类的对象。 例如: 顶层操作符重载函数的调用方式与普通函数相同:a = operator+(b, c); 或者:a = b +c 注意 被重载的操作符要么是一个类的成员函数,要么在他的参数表中包含一个类对象。 如下定义是错误的 用顶层函数进行操作符重载 操作符以顶层函数实现时,如果连一个类对象参数都没有,比如定义为 那么对如下表达式(其中x和y为float 型): x % y 编译系统就不能区别%是内建的,还是用户定义的。 如果操作符%是类成员函数,或是有一个类对象参数的顶层函数,编译系统就能够根据特定的上下文决定调用哪一个%操作符。 用顶层函数进行操作符重载 通常,如果使用成员函数重载二元操作符,只需要一个参数;而用顶层函数进行二元操作符重载时,需要两个参数,这两个参数分别对应操作符的两个操作数。 类似地,如果用成员函数重载一元操作符,不需要参数;如果用顶层函数,需要一个参数,该参数对应操作符惟一的操作数。 用顶层函数进行操作符重载 注意:下标操作符[ ]、赋值操作符=、函数调用操作符( )和指针操作符-必须以类成员函数的形式进行重载 因为操作符以类成员函数的形式重载时,可以保证其第一个操作数是类的对象,因而当x是一个类对象时,像9[x]和6 . 3 2 = x这样的表达式就不会被程序接受。 但有些情况下,必须使用顶层函数进行操作符重载 因此,与使用类成员函数重载二元操作符相比,只要定义了可用于转型的构造函数,使用顶层函数进行重载的一个优点就

文档评论(0)

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

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

1亿VIP精品文档

相关文档