- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 多 态 性
知识点
编程时的多态性与运行时的多态性
函数重载
运算符重载
虚函数
应用举例
难点
函数重载
虚函数
运算符重载
纯虚函数和抽象类
要求
掌握:
运行时的多态性
函数重载
了解:
运算符重载
虚函数
4.1 编程时的多态性与运行时的多
态性
所谓多态性就是不同对象收到相同的信息时,产生不同
的动作。也就是说,多态性是指用一个名字定义不同的
函数,这些函数执行不同但又类似的操作,即用同样的
接口访问功能不同的函数,从而实现“一个接口,多种
方法”。
在C++中,多态性的实现和联编这一概念有关。一个源
程序经过编译、连接,成为可执行文件的过程是把可执
行代码联编在一起的过程。其中在运行之前就完成的联
编称为静态编,又叫前期联编;而在程序运行时才完成
的联编叫动态联编,也称后期联编。
静态联编是指系统在编译时就决定如何实现某一
动作。静态联编要求在程序编译时就知道调用函
数的全部信息。因此,这种联编类型的函数调用
速度很快。效率高是静态联编的主要优点。
动态联编是指系统在运行时动态实现某一动作。
采用这种联编方式,一直要到程序运行时才能确
定调用哪个函数。动态联编的主要优点是:提供
了更好的灵活性、问题抽象性和程序易维护性。
静态联编支持的多态性称为编译时多态性,也称
静态多态性。在C++中,编译时的多态性是通过
函数重载和运算重载实现的。
动态联编所支持的多态性称为运行时的多态性,
也称动态多态性。在C++中,运行时的多态性是
通过继承和虚函数来实现的。下面分别对他们进
行讨论。
4.2 函数重载
编译时的多态性可以通过函数重载来实
现。函数重载的意义在于它能用同一个
名字访问一组相关的函数,即可以有多
个同名但参数形式不完全相同的函数。
在调用时无需记忆多个函数名,编译器
根据实参的类型来确定应该调用哪一个
函数。两个或两个以上的函数共用一个
函数名称为函数重载,被重载的函数称
为重载函数。
函数重载无须特别声明,只要所定义的函数与
已定义的同名函数形参形式不完全相同,C++
编译器就认为是函数重载。例如以下两个函数:
void GetTime(long *ticks);
Void GetTime(int* hours,int*
minutes,int *seconds);
它们作用相同,都是返回当前时间,只是其返
回时间的形式不同,使用相同的函数名,但其
参数形式不同。
例4-1 求一个数的平方
# includeiostream.h
int square(int i)
{return i*i;}
float square(float f)
{return f*f;}
double square(double d)
{return d*d;}
int main()
{int i=12;
float f=3.4;
double d=5.67;
couti*i=square(i)endl;
coutf*f=square(f)endl;
coutd*d=square(d)endl;
return 0;
}
程序运行结果为:
12*12=144
3.4*3.4=11.56
5.67*5.67=32.1489
程序中定义了三个名为square的函数,它们的
函数原型不同,编译器在遇到程序中对square
函数的调用时根据参数形式进行匹配,如果找
不到相对应的参数形式的函数定义,编译器认
为该函数没有函数原型,给出错误信息。
函数重载时应注意,如果某个函数参数有缺省
值,必须保证其参数缺省后调用形式不与其他
函数混淆。例如下面的重载是错误的:
int f(int a,float b);
void f(int a,float b,int c=0);
因为第二个函数缺省参数c后,其形式与第一个
函数参数形式相同,下面的函数调用语句:
f(10,2.0
您可能关注的文档
- C++面向对象程序设计 曹静 教学课件 第01章 面向对象程序设计概述.pdf
- C++面向对象程序设计 曹静 教学课件 第02章 C++语言基础.pdf
- C++面向对象程序设计 曹静 教学课件 第04章 类与对象.pdf
- C++面向对象程序设计 曹静 教学课件 第10章 项目设计——校园信息管理系统.pdf
- C++面向对象程序设计 教学课件 陈维兴 陈昕 C++邮电 2.pdf
- C++面向对象程序设计 教学课件 陈维兴 陈昕 C++邮电 3.pdf
- C++面向对象程序设计 教学课件 陈维兴 陈昕 C++邮电 4.pdf
- C++面向对象程序设计 教学课件 陈维兴 陈昕 C++邮电 5.pdf
- C++面向对象程序设计 教学课件 李兰_ 第2章.pdf
- C++面向对象程序设计 教学课件 李兰_ 第3章.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第1章 C++语言概述.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第2章 变量和表达式及数组.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第3章 语句和预处理.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第4章 指针和引用.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第5章 函数.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第6章 类和对象(一).pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第7章 类和对象(二).pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第8章 继承性和派生类.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第9章 多态性和虚函数.pdf
- C++语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 教学课件 吕凤翥 王树彬_ 第10章 C++语言的输入输出操作.pdf
最近下载
- 一种基于联邦学习的无线电地图构建方法及系统.pdf VIP
- 绿色溶剂—标准曲线法测定油品酸值.pdf VIP
- L10100023,S10100005《神经康复》《神经康复学实训》课程标准-L.pdf VIP
- 《ISO31000:2024风险管理指南》指导手册(雷泽佳译2024-04).pptx VIP
- ISO 31000:2018风险管理-指南(雷泽佳译2022).pdf VIP
- 中国荞麦粉行业市场发展监测及投资前景展望报告.docx
- 检验检测机构监督管理办法解读.pptx VIP
- 2024数智技术服务能力基本要求及评价.docx VIP
- 2025年河南物流职业学院教师招聘考试笔试备考题库及答案解析.docx VIP
- [科技出版社张鄂现代设计理论与方法课件]08new-第2章优化设计-1.ppt VIP
文档评论(0)