- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 便于输出常量
重载形式
禁止重载为成员函数
重载举例;举例:流操作符重载;有人总结
必须重载为成员函数
=,函数调用( ),类型转换函数,下标[ ],成员访问-
建议重载为成员函数 一元操作符
+=, *=, ...等复合赋值,++,--,* 指针访问单目
必须重载为非成员函数
流操作符 和
建议
您可能关注的文档
- 外研版高中英语 必修四Module1 知识点概要1.ppt
- 外研版高中英语book 1 module 5 Speaking Listening Pronuciation Everyday English Function概要1.ppt
- 第10章 企业物流概要1.ppt
- 外研版高中英语book 1 module 6 Grammar概要1.ppt
- 外研版高中英语book 2 module 1 vocabulary and reading概要1.ppt
- 第10章 半导体器件概要1.ppt
- 第10章 购物商城首页的制作概要1.ppt
- 第10章 联 接概要1.ppt
- 统一中国的第一个皇帝 —秦始皇概要1.ppt
- 第10章 多组分纤维纺织品的染色概要1.ppt
文档评论(0)