- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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. 使用成员和非成员
您可能关注的文档
- 案例引导的程序设计教学.ppt
- 标准C++程序设计第1章 C++语言基础.ppt
- 标准C++程序设计第2章 基本数据与操作.ppt
- 标准C++程序设计第3章 语句与流程控制.ppt
- 标准C++程序设计第4章 指针、引用与数组.ppt
- 标准C++程序设计第5章 函数与函数模板.ppt
- 标准C++程序设计第6章 类与对象.ppt
- 标准C++程序设计第7章 组织程序结构的相关技术.ppt
- 标准C++程序设计第8章 静态成员、友员与成员指针.ppt
- 标准C++程序设计第9章 继承.ppt
- 2025年新化县住房保障服务中心选调工作人员(3人)模拟试卷含答案详解(综合题).docx
- 2025年广东实验中学琶洲学校招聘工作人员(第一批)(26人)笔试备考试题及答案详解(夺冠).docx
- 2025年富裕县12345综合指挥中心招聘公益性岗位人员(1人)笔试备考试题含答案详解(完整版).docx
- 2025年广东省梅州市蕉岭县专场招聘紧缺学科教师(8人)笔试备考试题含答案详解(综合题).docx
- 2025年大庆市杜尔伯特蒙古族自治县乡镇卫生院招聘医学毕业考试通模拟试卷精选答案详解.docx
- 2025年山东省人民政府发展研究中心公开招聘人员(4名)笔试备考试题附答案详解ab卷.docx
- 2025年广东省博罗县妇女联合会招聘编外专业人员(1人)模拟试卷附答案详解(巩固).docx
- 2025年巴林左旗林业和草原局关于国有公益林护林员招聘(66人)笔试备考试题参考答案详解.docx
- 2025年广东省佛山市南海区事业单位招聘急需紧缺专业博士(10笔试备考试题附答案详解(夺分金卷).docx
- 2025年广西金融职业技术学院招聘高级职称人才(11人)笔试备考试题及答案详解1套.docx
文档评论(0)