第8运算符重载.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文档。上传文档
查看更多
第8运算符重载

第8章 运算符重载 目 录 问题引入: #include iostream.h class complex { private: double real; double imag; public: complex(double r=0.0, double i=0.0) { real=r; imag=i; } void display(){coutreal“+”image“i”endl;} } void main() { int ia=1,ib=2,ic; ic=ia+ib; complex a(10,20),b(5,8),c; c=a+b? } 8.1 运算符重载概述 背景 c++中预定义的运算符的操作对象只能是基本数据类型,而用户自定义类型(比如类)也需要有类似的运算操作 能否对运算符重新定义,赋予已有符号以新的功能? 运算符重载 “借用”已有的运算符,对其赋予多重含义,对自定义的类对象实现自定义的新功能! ——同一个运算符作用于不同类型数据导致不同的行为 运算符重载实质就是函数重载! 运算符重载的规则 (1)只能重载已有的C++运算符,不可自创新的运算符! C++中的运算符除少数几个,全部可以重载, (表8.2), (2)重载后运算符的优先级和结合性都不变。 (3)重载的功能应当与原有功能相类似 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。 一般来讲,重载的功能应当与原有功能相类似 不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 表8.2 C++中可以重载的运算符 自定义类中运算符重载的形式(2种) 重载为类的公有成员函数 函数类型 operator 运算符(形参表) { 函数体; } 重载为类的友元函数 friend 函数类型 operator 运算符(形参表) { 函数体; } 二者区别——参数个数不同! 成员函数方式重载: 参数个数比原来运算数少一个(后缀++、--除外)——就是缺省的this指针 友元函数方式重载: 参数个数与原运算数个数相同,且至少有一个参数是说明该友元的类或是该类的引用 单目运算符最好重载为类的成员函数 双目运算符则最好重载为类的友元函数! 成员方式重载vs友元方式重载 成员方式重载: 因每个成员函数总是将当前调用对象(this指针)作为该成员函数隐含的第一个参数——运算符的第一个运算对象所以若某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递, ——少了的运算数就是该对象本身(this指针) 友元方式重载: 而友元函数中没有this指针,所以友元函数对某个对象的数据进行操作时,就必须通过该对象的名称来实现,因此使用到的所有运算分量都要进行传递 ——运算数的个数就不会有变化。 一般来讲,单目运算符最好重载为成员函数,而双目运算符则最好重载为友元函数 8.2 单目运算符重载++/-- ++/--前缀、后缀重载 “++”、“--”运算符有前缀和后缀两种形式 “++”和“--”重载运算符也有前缀和后缀两种 以“++”重载运算符为例 函数类型 operator ++(); //前缀运算 函数类型 operator ++(int); //后缀运算 使用 前缀运算符 ++对象; 后缀运算符 对象++; [例8.1]增加后缀++重载? [例8.2] #include iostream.h class Sample { private: int n; public: Sample(int i) :n(i){ } void operator ++() {++n; } //前缀运算符重载 void operator ++(int) { n+=2; } //后缀运算符重载 void display() {cout n= n endl;} }; void main() { Sample a(5),b(5); a++; //调用后缀运算符重载 ++b; //调用前缀运算符重载 a.display(); b.display(); } [例8.2]重载函数带返回值? [例8.3] #include iostream.h class Sample { private: int n; p

文档评论(0)

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

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

版权声明书
用户编号:7065201001000004

1亿VIP精品文档

相关文档