第6节 操作符重载.pptVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上海大学机电工程与自动化学院 雷电 ----- 增强可读性、表达的一致性 上海大学机电工程与自动化学院 雷电 引言 第二章中 string s; s = “lei”; s += “dian”; if( s == “leidian”){} C++本身已对操作符进行了重载 2/3 2.0/3.0 2*3 2.0*3.0 *p int *p 23 p 上海大学机电工程与自动化学院 雷电 6.1 基本操作符重载 大多数操作符可重载,可被派生类继承 但 . :: .* ?: 不可重载 =可重载,但没有继承性 上海大学机电工程与自动化学院 雷电 基本原理: 操作符功能的实现=》函数代码的实现 操作符的运算 =》函数的调用 操作数 =》函数的参数,或对象 操作符@ =》函数名 operator@ 表达式 X @ Y =》X. operator@ ( Y ) (用类的成员函数重载) 或 =》operator@ ( X , Y ) (用顶层函数重载) 表达式 @X =》X. operator@ () 或 =》operator@ ( X) 上海大学机电工程与自动化学院 雷电 6.2 复数类 目标 重载+ - * /,达到如下功能 Complex c1(7.7 , 5.5 ); Complex c2(4.2 , -8.3 ); Complex c; c=c1+c2; //11.9 - 2.8i c=c1-c2; // 3.5 + 13.8i c=c1*c2; //77.9 – 40.81i c=c1/c2; //-0.153819 + 1.005547i c=7+c1; c=c1- 5; 上海大学机电工程与自动化学院 雷电 6.3 用顶层函数进行操作符重载 表达式 X @ Y =》 operator@ ( X , Y ) 优点:第1个操作数可以不是类对象。 需解决的问题:访问对象成员受限。 Ex6_1 上海大学机电工程与自动化学院 雷电 6.4 friend 在类的声明体中,用friend关键字声明能任意访问本类成员的顶层函数或其它类。 friend关系不能继承。 class A {…}; int func(){…} class B { …… friend A; friend int func(); }; 上海大学机电工程与自动化学院 雷电 6.5 、的重载 例: istream operator(istreamin,Complex c) { return inc.realc.image; } ostream operator(ostreamout,Complex c) { return outc.real“+”c.image; } 不用可以吗? 上海大学机电工程与自动化学院 雷电 6.7.1 [ ]的重载 必须是成员函数重载 例: class Dictionary{ public: string operator[ ](string key) {…} …….}; Dictionary dic; dic[“TV”]=“电视”; 像数组一样使用, 但不一定是下标 上海大学机电工程与自动化学院 雷电 运算符“=”的重载 在正常情况下,系统会为每一个类自动生成一个默认的赋值运算符,数据成员依次拷贝. 如果一个类包含指针成员,就应该重载= class Sample { char *p; public: Sample operator = (Sample s) { if( p!=NULL) delete p; p=new char[strlen(s.p)+1]; strcpy( p, s.p ); return *this; } } Sample a1; ……. Sample a2; a2 = a1; 上海大学机电工程与自动化学院 雷电 6.7.2 ( ) 操作符重载-仿函数 必须是成员函数重载 class Func { int x; public: Func( int x ){this-x = x;} int operator( )(int a) { return x*a; } }; int myFunc( Func f, int a) { return f ( a ); } int main( ) { Func func(2); int x = func( 3 ); int y = myFunc( func , 4); return 0; }

文档评论(0)

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

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

1亿VIP精品文档

相关文档