- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C面向对象程序设计第四章多态性
主讲教师: 陈良银 个人主页:/~chenliangyin 教材:《C++面向对象程序设计》 李涛 主编 游洪跃 陈良银 李琳等编 高等教育出版社 2006年2月出版 本书内容 第1章 绪论 第2章 C++类和对象 第3章 继承 第4章 多态性 第5章 模板 第6章 C++常见问题 第7章 Visual C++编程基础 第8章 对话框、常用消息、菜单和工具条 第9章 单文档界面和多文档界面 第10章 图形设备接口 实验 (待安排) 4.1 多态性基本概念及其实现方式 多态性就是一个事物多种形态,就是同一符号或者名字在不同情况下具有不同解释的现象。 多态性有两种表现形式: 一种是不同的对象在收到相同的消息时,产生不同的动作; 另一种是同一对象收到相同的消息却产生不同的函数调用。 4.1.2 多态的两种实现方式 两种表现形式分别叫做:编译时多态和运行时多态。 编译时多态——也叫静态多态性,属于早期绑定,在编译时就实现了绑定,它是静态联编的; 运行时多态——也叫动态多态性,属于晚期绑定,在编译时还无法确定绑定对象,只有在运行时才能够实现绑定,它是动态联编的。 以下两种情况不是动态联编的: 1、在基类中未使用虚函数、纯虚函数。 2、在基类中使用了虚函数和纯虚函数,使用对象直接调用。这也不是动态联编的。 “绑定”——就是让函数调用与函数体产生关联。 在编译时就确定——叫“早期绑定”; 在程序运行时才确定——叫“晚期绑定”。 而C++的多态性在“早期绑定”和“晚期绑定”两方面都有体现。 4.2 虚函数 虚函数是在基类中使用了关键字virtual的成员函数。 1、虚函数定义在基类和派生类中,函数原型完全一致; 2、函数重载在同一个类中,或者都在类外定义,函数原型必定不完全相同。 4.2.1 虚函数的基本概念及其定义 主要通过例子程序说明其机制. 例4_1:利用对象分别调用不同的Show( )——正确调用了特定的Show( )函数。 s4_1\sclass4_1_student.h s4_1\sclass4_1_student.cpp s4_1\smain4_1.cpp 在main( )中通过“对象.成员函数”的形式调用show( ),分别调用了对象自己的show( )。 下面通过基类指针来调用,会有什么结果啦? 例4_2:利用基类的指针调用不同的Show( )。 s4_2\smain4_2.cpp ch4_2\sclass4_2_student.h ch4_2\sclass4_2_student.cpp CPerson oCPerson( 德华刘,男 ); CPerson *pCPerson;//基类指针 CStudent oCStudent(学友张,男 ); pCPerson = oCPerson; //显示oCPerson对象的姓名和性别 pCPerson-Show( ); pCPerson = oCStudent; //显示oCStudent对象的姓名、性别和学号 pCPerson-Show( ); 无论让基类的指针指向基类对象还是派生类对象,系统都无法调用派生类对象oCStudent的Show( )函数。 实际调用的都是基类的Show( )成员函数。 通过基类的引用,引用派生类对象,会有什么结果啦? 例4_3:利用基类的引用作为参数,调用不同的Show( ),依然未达到目的。 s4_3\smain4_3.cpp ch4_3\sclass4_3_student.h ch4_3\sclass4_3_student.cpp void TestReference( const CPerson rCPerson ) { rCPerson.Show( ); } CPerson oCPerson( 德华刘,男 ); //构造一个CPerson的对象 CStudent oCStudent(学友张,男 ); //构造一个CStudent对象 TestReference( oCPerson ); //以基类对象作引用参数 TestReference( oCStudent ); //以派生类对象作引用参数 无论引用基类对象还是派生类对象,函数内调用的都是基类的Show( )成员函数。 通过基类的引用去引用派生类对象,只能看到派生类从基类中继承而来的部分。 这是由于C++的静态联编机制造成的。它首先将指向基类的指针与基类成员函数Show( )连接在一起。这样,不管pCPerson指向哪个
您可能关注的文档
- 2011年社会工作者练习题二.doc
- 2011年监理工程师监理概论新 第二册.pdf
- 2011年监理工程师监理概论新 第四册.pdf
- 2011年秘书资格基础知识.doc
- 2011年秘书资格多项选择题.doc
- 2011年管理咨询师模拟试题.doc
- 2011年管理咨询师案例分析.doc
- 2011年监理工程师《合同管理》教材新 第四册.pdf
- 2011年监理工程师监理概论新 第三册.pdf
- 2011年统计师考试训练题一.doc
- 2024年中国钽材市场调查研究报告.docx
- 2024年中国不锈钢清洗车市场调查研究报告.docx
- 2024年中国分类垃圾箱市场调查研究报告.docx
- 2024年中国水气电磁阀市场调查研究报告.docx
- 2024年中国绿藻片市场调查研究报告.docx
- 2010-2023历年初中毕业升学考试(青海西宁卷)数学(带解析).docx
- 2010-2023历年福建厦门高一下学期质量检测地理卷.docx
- 2010-2023历年初中数学单元提优测试卷公式法(带解析).docx
- 2010-2023历年初中毕业升学考试(山东德州卷)化学(带解析).docx
- 2010-2023历年初中毕业升学考试(四川省泸州卷)化学(带解析).docx
最近下载
- 初中历史_中华民国的创建教学设计学情分析教材分析课后反思.doc
- H7车组合仪表内部参数调节方法 (1).pdf VIP
- 重汽豪沃(HOWO)T5G SAC仪表、驾驶室过度线针脚定义驾驶室电器部件讲解.pdf VIP
- T5T7NanoBCU TFT仪表服务站维修培训手册.pdf VIP
- 钢琴谱学习Parla Piu Piano 降E-降G.pdf
- T7H TFT仪表、NanoBCU系统简介.ppt VIP
- 《生活饮用水卫生标准》(GB5749-2022).pdf
- 2024年监理工程师继续教育试题及答案(74分)-延续注册-必修课.docx
- 杭州银行测评笔试题目.pdf
- 危险化学品安全管理条例.ppt
文档评论(0)