c++(谭浩强 清华大学出版社)05-第10章.ppt

c++(谭浩强 清华大学出版社)05-第10章.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10.1什么是运算符重载 赋予C++运算符多种含义。和函数重载一样。 C++(包括C语言)系统已经重载了很多运算符。 应用于标准数据类型数据的处理。 C++给用户也提供了重载标准运算符的权力。允许将标准C++运算符应用于自定义类型(类)的对象。 根据用户使用被重载的运算符的不同的场合,确定它的作用是什么。 10.2 运算符重载的方法 定义一个重载运算符的函数。 在需要执行被重载运算符时,系统自动调用该函数,以实现相应的运算。 函数格式: 函数类型 operator 运算符名称@(形参列表) { 对运算符的重载处理 } 调用方法:显示的调用函数; 按运算符的使用方法写成表达式。 例:重载“+”运算符,应用于复数类 方法1: complex operator +(const complex c1, const complex c2) { complex c; c.real=c1.real+c2.real; c.imag=c1.imag+c2.imag; return c; } class complex{ friend complex operator +(const complex c1, const complex c2); …. }; 方法2:成员函数 class complex{ … Public: complex operator +(complex c2); … }; complex complex::operator +(complex c2) { complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } int main() { complex c(3,4),c2(-5,10),c3; c3=c1+c2; return 0; } 10.3 重载运算符的规则(限制) 1、大多数系统预定义运算符都能重载,但以下运算符不允许重载: sizeof :: ?: . .* 2、不能定义新的运算符 3、功能相似规则:重载后的功能尽量类似于作用于标准数据类型的功能。提高可读性。即在使用时应模仿运算符的习惯用法 。但对新功能,只能借用其它功能的运算符。 4、不能改变优先级;不能改变结合性;不能改变运算符所需操作数的个数;运算符重载函数不能有默认的参数。交换律不适用 5、重载的运算符的操作数必须有自定义类型。其参数至少应有一个是类对象(或类对象的引用)。以防止用户为预定义类型重载运算符。 运算符被重载时,只是相对一特定类被重载,在特定的环境下作出特定的解释。当离开这个特定环境后,具有原来的意义(系统定义); 6、形参不能为指针类型,形参可以为对象或对象的引用。 7、运算符重载函数可以是:友元函数、成员函数和普通的全局函数,具体情况具体分析。 8、下列运算符只能通过成员函数重载。 = 、() 、 [ ] 、 类型转换函数。 9、 、 只能重载为友元。 10、运算符“=”和“” 系统提供缺省重载。 成员函数重载与友员函数重载的区别 声明与定义的形式不同 参数数目不同 this指针的有无,导致参数个数不同。 编译器的解释不同 对操作数的处理能力不同(体现在双目上) 用友员重载需要改变操作数自身的运算符时,如++、--、+=等,参数必须采用传递引用的形式。若它们重载成成员函数,需要被修改的操作数是通过this指针传递的,对其修改没有问题。 成员函数重载的运算符第一个参数(左操作数)只能是该类的对象。 若为非成员函数,一般应为友元函数,这样可以访问私有数据成员。 必须选则其中一种形式。不能同选。避免二义性。 哪种好? 一般没太大区别,但有些运算符只能采用特定形式。 只能通过成员函数重载的运算符: = 、() 、 [ ] 、 类型转换函数。 只能重载为友元: 、 。 一般双目用友元,单目用成员。 有时使用友元更好(尤其是为类定义了类型转换时 )。 10.5 ~10.6 几个典型运算符的重载 赋值运算符=的重载(为了实现连续赋值,要返回该对象) 自增++与自减--运算符的重载 重载流插入和流提取运算符(友元) 见书上例 10.4 (P324) 例 10.5 (P328) 单

文档评论(0)

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

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

版权声明书
用户编号:7060131150000004

1亿VIP精品文档

相关文档