第10章 多态性概要1.pptxVIP

  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文档。上传文档
查看更多
第10章 多态性概要1

第 十 章 多 态 性;第十章 多态性;多态性 polymorphism OOP 四大特点:抽象、封装、继承、多态 多态性:一个接口函数名 有多种实现(多义性) 消除多义性:在编译或运行时绑定确定为一对一关系 多态性分类 绑定角度 静态多态性 —— 编译时绑定binding编译时多态性 函数重载,操作符重载 函数模板,类模板 静态类型转换 动态多态性 —— 运行时绑定binding运行时多态性 动态类型转换 虚函数virtual function 真正的多态性;operator:操作符或运算符 重载Overloading 一名多用:一个名字,多种功用 函数重载:同名函数有多种实现 完成多种功能 作用与应用 作用:赋予操作符新的功能 +:不重载只能操作基本数据类型 +:重载可实现 string对象的连接 操作符已有的功能,不足以满足所有要求 +:不能操作复数、日期、时间、数组...... 哪些操作符可以被重载 系统已有的操作符大部分,不能自己发明;禁止重载的操作符 成员访问操作符,如:obj.length() 成员指针访问操作符,如:obj.*pt 域限定操作符,如:obj::fun() 条件操作符,如:xy ? x : y 操作符重载的实质 函数重载:操作符函数重载 例如 Complex 对象的加法:重载 +函数 Complex operator + (Complex c2); // 函数声明 返回值 函数名 ( 形参表 ); ;操作符函数的形参限制 ? 至少有一个形参是对象或对象引用更好 目的:保证重载操作符用于自定义类型 防止你修改操作符的原功能 例如: int operator + (int a, int b) // ERROR { return (a - b); } // 试图修改 + 原功能 重载方式 类的成员函数 类的友元函数 独立函数(普通函数)罕见:类的数据一般为私有;操作符重载·举例:复数加法;重载不能改变操作符的操作数个数,例如: 和 双目操作符需两个操作数,重载后仍是双目操作符 重载不能改变操作符的优先级,例如: * 和 / 优先级高于 + 和 - 重载不能改变运算符的结合性 操作符重载函数的形参不能有缺省值 否则,改变了参数个数操作数 重载操作符的功能应与原功能相近,例如: + 重载为 string 对象连接,便于理解 重载赋值操作符 = 对象赋值时非初始化,拷贝构造函数不被调用 重载= 实现:深拷贝(类中有指针型成员);重载方式选择 友元破坏类的封装性,尽量重载为成员函数。通常做法: 双目/二元操作符:重载为友元函数 上例二元操作符+重载为成员函数:this指针指明了一个操作数, 重载+函数的形参个数比需要的操作数少一个 不直观 重载为友元函数:操作数个数 = 形参个数 单目/一元操作符:重载为成员函数 单目操作符重载为成员函数,不需要参数 特殊规定 赋值、下标、函数操作符必须重载为成员函数 流 和 、类型转换符不能重载为成员函数;例:二元操作符重载为友元;例:二元操作符重载为友元;例:一元操作符重载为成员函数;类型转换构造函数 表达式常用情况 需要对象时:数值 ? 对象 例如:Complex(6) 数值6 ? 无名对象 类型转换函数可用成员函数如get系列得到成员,然后转换稍麻烦 表达式常用情况 需要数值时:对象 ? 一个数值 类型名重载而非操作符重载,形式上类似 定义类型转换函数 operator 类型名( ) //类型函数,无参数无返回值 例如: operator double( ) { return real; } 只能重载为成员函数 转换的是本类对象根据表达式推测;操作符重载·类型转换函数;赋值操作符重载·实现深拷贝;赋值操作符重载·实现深拷贝;重载目的 自定义类型的数据不能直接用 和 如: 数组、结构体、类 重载 和 :输入、输出自定义类型数据 重载定义 istream operator (istream 流对象名, 自定义类型 ); ostream operator (ostream 流对象名, const 自定义类型 ); 返回值和第一个参数必须是流对象的引用流对象不可复制 第二个参数也是引用避免创建临时无名对象,const 便于输出常量 重载形式 禁止重载为成员函数 重载举例;举例:流操作符重载;有人总结 必须重载为成员函数 =,函数调用( ),类型转换函数,下标[ ],成员访问- 建议重载为成员函数 一元操作符 +=, *=, ...等复合赋值,++,--,* 指针访问单目 必须重载为非成员函数 流操作符 和 建议

文档评论(0)

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

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

1亿VIP精品文档

相关文档