第十章运算符重载.ppt

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

第十章 运算符重载 主要内容 10.1 什么是运算符重载 10.2 运算符重载的方法 10.3 重载运算符的规则 10.4 运算符重载函数作为类成员函数和友元函数 10.5 重载双目运算符 10.6 重载单目运算符 10.1 什么是运算符重载 所谓重载,就是重新赋予新的含义。 用“+”、“-”能够实现复数的加减运算吗? 实现复数加减运算的方法 ——重载“+”、“-”运算符 运算符重载的实质: 运算符重载是对已有的运算符赋予多重含义 必要性:C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 实现机制:将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。编译系统对重载运算符的选择,遵循函数重载的选择原则。 例10.1 通过函数来实现复数相加。 10.2 运算符重载的方法 运算符重载的方法是定义一个重载运算符的函数,在需要时,系统就自动调用该函数,以实现相应的运算。 重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参表列) { 对运算符的重载处理 } 例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的: Complex operator+ (Complex c1,Complex c2); 在定义了重载运算符的函数后,可以说: 函数operator+重载了运算符+。 例10.2 改写例10.1,重载运算符“+”,使之能用于两个复数相加。 使用户程序易于编写、阅读和维护。 扩大了C++已有运算符的作用范围,使之能用于类对象。使C++具有更强大的功能、更好的可扩充性和适应性。 在实际工作中,类的声明和类的使用往往是分离的。假如在声明Complex类时,对运算符+, -, *, /都进行了重载,那么使用这个类的用户在编程时可以完全不考虑函数是怎么实现的,放心大胆地直接使用+, -, *, /进行复数的运算即可,十分方便。 10.3 重载运算符的规则 九项规则: (1) C++只能对已有的C++运算符进行重载,不允许用户自己定义新运算符。 (2) C++允许重载的运算符: C++中绝大部分的运算符允许重载。 不能重载的运算符只有5个: . 、*、sizeof、::、 ?: (3) 重载不能改变运算符运算对象(即操作数)的个数。 (4) 重载不能改变运算符的优先级别、结合性。 (5) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。 (6) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。 (7) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“”不必用户重载。 (8) 应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能。 (9) 运算符重载函数可以是类的成员函数(例10.2),也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数。 10.4 运算符重载函数作为类成员函数和友元函数 重载为类成员函数 重载为友元函数 运算符重载函数是非成员函数。 例10.3 将运算符“+”重载为适用于复数加法,重载函数不作为成员函数,而放在类外,作为Complex类的友元函数。 C++规定,有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数,有的运算符则不能定义为类的成员函数(如流插入“”和流提取运算符“”、类型转换运算符)。 由于友元的使用会破坏类的封装,因此从原则上说,要尽量将运算符函数作为成员函数。但考虑到各方面的因素,一般将单目运算符重载为成员函数,将双目运算符重载为友元函数。 10.5 重载双目运算符 双目运算符(或称二元运算符)是C++中最常用的运算符。双目运算符有两个操作数,通常在运算符的左右两侧,如3+5, a=b,i10等。在重载双目运算符时,不言而喻在函数中应该有两个参数。下面再举一个例子说明重载双目运算符的应用。 例10.4 定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”,“”和“”,用于两个字符串的等于、小于和大于的比较运算。 (1) 先建立一个String类: (2) 再进一步修饰完善,使输出结果更直观。下面给出最后的程序。 10.6 重载单目运算符 单目运算符只有一个操作数,如!a,-b,c,*p,还有最常用的++I 和—I 等。重载单目运算符的方法与重载双目运算符的方法是类似的。但由于单目运算符只有一个操作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档