第6章运算符重载.ppt

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

第6章 运算符重载 运算符重载是C++的一项强大功能。通过重载,可以扩展C++运算符的功能,使它们能够操作用户自定义的数据类型,增加程序代码的直观性和可读性。 本章主要介绍 类成员运算符重载与友元运算符重载, 二元运算符与一元运算符重载, 运算符++、--、[]、()重载, this指针与运算符重载及 流运算符和的重载 6.1 运算符重载基础 6.1.1运算符重载的概念 C++的运算符对语言预定义类型是重载的 int i=2+3; double j=2+4.8; float f=float(3.1)+float(2.0); 对于上面的3个加法表达式,C++系统提供了类似于下面形式的运算符重载函数: int operator+(int,int); double operator+(int,double); float operator+(float,float); 6.1 运算符重载基础 C++允许程序员通过重载扩展运算符的功能,使重载后的运算符能够对用户自定义的数据类型进行运算。 比如,设有复数类Complex,其形式如下: class Complex{ double real,image; public: ...... }; 假设定义了下面的复数对象,并且要实现两个复数相加的运算。 Complex c1,c2,c3; …… c1=c2+c3; 6.1 运算符重载基础 why? 使程序便于编写和阅读 使程序定义类型与语言内建类型更一致 how? 使用特殊的成员函数 使用自由函数,一般为友元 6.1.2 运算符重载限制 可以重新定义大多数运算符, + - / * % ^ | ~ ! = += -= *= /= %= ^= = |= = = == != = = [ ] () new new[] delete delete[] 不能定义新的运算符 不能重载某些特殊运算符,包括: . .* - :: ?: sizeof typeid 不能改变运算符的目、优先级、结合性 不能重载语言预定义类型的运算符含义 如 # ## 无隐含重载,即:定义了+,并隐含不定义+= 程序定义的含义与运算符固有含义吻合 6.1.3 运算符重载的语法 运算符的计算结果是值,因此运算符函数是要返回值的函数。其重载的语法形式如下: 返回类型 operator@(参数表) 其中,operator是C++的保留关键字,表示运算符函数。@代表要重载的运算符,它可以是前面列举的可重载运算符中的任何一个。 6.1.4 类运算符的重载 1、C++为类默认的重载运算符 ① 赋值运算(=); ② 取类对象地址的运算函符(); ③ 成员访问运算(如“.”和“-”)。 这些运算符不需要重载就可以使用,但要在类中使用其他运算符,就必须明确地重载它们。 2、类运算符重载形式 (1)非静态成员运算符重载 以类成员形式重载的运算符参数比实际参数少一个,第1个参数是以this指针隐式传递的。 class Complex{ double real,image; public: Complex operator+(Complex b){……} ...... }; (2)友元运算符重载 如果将运算符函数作为类的友元重载,它需要的参数个数就与运算符实际需要的参数个数相同。比如,若用友元函数重载Complex类的加法运算符,则形式如下: class Complex{ …… friend Complex operator+(Complex a,Complex b); //声明 //...... }; Complex operator+(Complex a,Complex b){……} //定义 6.2 重载二元运算符 二元运算符的调用形式与解析 aa@bb 可解释成 aa.operator@(bb) 或解释成 operator@(aa,bb) 如果两者都有定义,就按照重载解析 class X{ public: void operator+(int); X(int); }; void operator+(X,X); void operator+(X,double); 6.2 重载二元运算符 6.2.1 作为成员函数重载 作为类的非静态成员函数的二元运算符,只能够有一个参数,这个参数是运算符右边的参数,它的第一个参数是通过this指针传递的,其重载形式类似于下: class X{ …… T1 operator@(T2 b){ ……}; } 其中,T1是运算符函数的返回类型,T2

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档