标准C++程序设计第11章 运算符重载.pptVIP

  1. 1、本文档共28页,可阅读全部内容。
  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文档。上传文档
查看更多
第11章 运算符重载 一个运算符代表一种操作,常用的运算通常可借助一个运算符来实现简单表示,如a+b。 C++允许对运算符进行重载,实质是对表示某种运算的特殊函数进行重载。 11.1 重载运算符的概念 Point add(Point av, Point bv) { return Point(av.getx()+bv.getx(), av.gety()+bv.gety()); } void main( ) { Point a(1,1), b(2,3), c; //c = a + b; c = add(a, b); } 11.1.1 重载运算符的函数特征 常见运算对于C++系统的内置类型是有效的,但对于用户定义的数据类型,多数运算不再有效。 class Point { int x, y; public: Point(int xv=0, int yv=0) { x = xv; y = yv; } int getx() { return x; } int gety() { return y; } }; 11.1.1 重载运算符的函数特征(续) 增加上述函数实现了对加法运算的重载。 使用方式: c = a + b; c = operator+(a, b); 运算符重载可以使程序更容易理解,但并不是必需的。 Point operator + ( Point av, Point bv ) { return Point(av.getx()+bv.getx(), av.gety()+bv.gety()); } 11.1.1 重载运算符的函数特征(续) 如果@代表一个运算符,则“operator@”是代表@运算的“函数名”。 运算符重载通常是与类定义联系在一起的。 Point operator+( Point av, int bx ) { return Point(av.getx()+bx, av.gety()); } 另一个重载的加法函数 11.1.2 类重载运算符的两种方法 1. 成员和非成员重载 将运算符重载函数定义为友员(普通函数,非成员)和成员(类的方法)。 class Point { int x, y; public: Point(int xv=0, int yv=0):x(xv), y(yv){ } Point operator+(Point bv); //成员重载 friend Point operator+(Point av, Point bv); //友员重载 }; Point Point::operator+(Point bv) //成员实现 { return Point(x+bv.x, y+bv.y); } Point operator+(Point av, Point bv) //友员实现 { return Point(av.x+bv.x, av.y+bv.y); } 11.1.2 为类重载运算符的两种方法(续) 2. 采用成员和非成员重载运算符时的函数原型差异 重要差别:函数形参的个数不同。 对于一个n目的运算符,使用友员重载时仍需n个形式参数,而使用成员重载时只有n-1个参数. 原因: 每个类的非静态方法都有一个缺省的this指针作为第一个参数。 类的友元函数则没有this指针。 11.1.2 为类重载运算符的两种方法(续) 3. 不同重载方法对运算符使用形式的影响 对于运算符@来说,采用类的成员函数重载时可以“a@b” 和a. operator@ ( b )两种形式使用运算符,如: Point a(1,1), b(2,3); Point c = a + b; Point c = a.operator + ( b ); 采用友员重载时可以采用运算和函数调用两种语法形式,如: Point d = a + b; Point e = operator+(a, b); 11.1.2 为类重载运算符的两种方法(续) 1、双目运算符@:   成员函数只带一个参数;友元函数带两个参数 aa@bb aa@bb 2、单目前缀运算符@:   成员函数不带参数;友元函数带一个参数      @aa @aa aa.operator@(bb) operator@(aa, bb) aa.operator@( ) operator@(aa ) 11.1.2 为类重载运算符的两种方法(续) 4. 使用成员和非成员

您可能关注的文档

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档