第11讲运算符重载1.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11讲运算符重载1

C++程序设计 第11讲 运算符重载(1) 复习函数重载 函数名相同,区别在于函数参数的个数和参数的类型。 一、 运算符重载的概念 二、 运算符重载的方法 运算符重载的方法 class Complex {public: Complex(double r=0,double i=0) { real=r; imag=i; } void disp() { cout(real,imag)endl;} // Complex add(Complex f2); Complex operator+ (Complex f2); private: double real,imag; }; 运算符重载的方法 请同学们自己完成对复数类的*、/等双目运算符的重载。 优点: 能使C++程序易于编写、阅读及维护; 运算符重载使C++具有了更强大的功能和更好的可扩充性。 注意:运算符被重载后,其原有的功能仍然保留,没有丧失或改变。 运算符重载规则和限制 下列运算符不能重载: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) ?: (条件运算符) sizeof (长度运算符) 只能重载C++语言中已有的运算符,不可臆造新的。 不改变原运算符的优先级和结合性。 不能改变操作数个数。 重载运算符的函数不能有默认的参数,否则就改变了运算符的目数。 重载的运算符必须与用户自定义类型的对象一起使用,其参数至少应有一个是类对象或类对象的引用。就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据运算符的性质(可防止把整数的加法改为减法)。 例如:以下是错的。 int operator +(int a,int b) { return (a-b);}  运算符重载的几个问题 1、可以重载的运算符  运算符重载的几个问题(续) 2、编译程序如何选用哪一个运算符函数?  运算符重载的几个问题(续) 用于类对象的运算符一般必须重载,但“=”和“”可不必重载。 赋值运算符(=)可以用于同类对象之间相互赋值。 地址运算符()能返回类对象在内存中的地址。 应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能。 运算符重载函数可以是类的成员函数,也可以是类的友员函数,还可以是普通函数。  三、运算符重载函数的两种形式 1、重载为类的成员函数 运算符重载的方法 重载双目运算符 双目运算符的运算符重载函数只有一个形参,用来接收第2个操作数,运算符重载函数中的类对象成员就是第1个操作数的数据成员。 双目运算符 B 如果要重载 B 为类成员函数,使之能够实现表达式 oprd1 B oprd2,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型。 经重载后,表达式 oprd1 B oprd2 相当于 oprd1.operator B(oprd2) 例:将“+”、“-”运算重载为复数类的成员函数。 规则: 实部和虚部分别相加减。 操作数: 两个操作数都是复数类的对象。 例:分析下列程序的输出结果。 输 出 例:指出程序中的错误,并改正。 运算符重载的方法 重载单目运算符 单目运算符的运算符重载函数没有形参,函数中的类对象成员就是操作数的数据成员。 运算符成员函数的设计 前置单目运算符 U(例 ++i,--i) 如果要重载 U 为类成员函数,使之能够实现表达式 U oprd,其中 oprd 为A类对象,则 U 应被重载为 A 类的成员函数,无形参。 经重载后, 表达式 U oprd 相当于 oprd.operator U() 运算符成员函数的设计 后置单目运算符 ++和-- (例i++,i--) 如果要重载 ++或--为类成员函数,使之能够实现表达式 oprd++ 或 oprd-- ,其中 oprd 为A类对象,则 ++或-- 应被重载为 A 类的成员函数,且具有一个 int 类型形参(区别于前置单目运算符++和-- )。 经重载后,表达式 oprd++ 相当于 oprd.operator ++(0)  运算符重载示例 例:++运算符。  运算符重载示例(续)  运算符重载示例(续) 输 出 例 运算符前置++和后置++重载为时钟类的成员函数。 前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数需要有一个整型形参。 操作数是时钟类的对象。 实现时间增加1秒钟。 #includeiostream using namespace std;

文档评论(0)

yaocen + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档