版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++程序设计宋存利第七章多态知识点:虚函数纯虚函数7.1虚函数多态是面向对象程序设计的重要特征之一。所谓多态(polymorphism),就是一个函数名,有多个函数体,不同的语境,对应的函数体则不同。在C++中多态的实现有两种形式,一种是静态多态,一种是动态多态。静态多态通过函数重载和运算符重载来实现(详见第3章和第5章),静态多态的特点是在编译阶段编译器根据相应函数的参数个数和类型来确定对应函数的函数体。动态多态则指函数在编译阶段无法确定它与函数体之间的联系,只有当执行到相应的语句时才能确定函数名对应的函数体,因此叫动态多态。7.1虚函数实现动态多态,一个关键的步骤是定义类的某个成员函数是虚函数,虚函数的定义格式为:
virtual返回值类型
函数名(参数列表){函数体}
其中,virtual是关键字,它用来声明类的某个函数为虚函数,函数的其他部分的说明与普通函数说明没有区别。说明:虚函数必须为类的成员函数,且不能是静态成员函数和构造函数。【例7-1】为了说明虚函数的意义,请看一个案例,然后引出虚函数的必要性,本例是一个典型的点和圆的继承关系。Seventh_1_1.cpp(非虚函数)
Seventh_1_2.cpp(虚函数)请比较这两的与逆行结果的不同,总结虚函数的特点7.1虚函数1、动态多态实现的基础条件:动态多态通过虚函数实现。动态多态要在继承的基础上才能实现。动态多态要利用基类的指针(引用)指向(引用)派生类对象,最后,通过该指针(引用)访问的是虚函数。7.1虚函数2、对虚函数的几点说明:(1)在基类中的成员函数可以声明为虚函数,不能是全局函数、类的友元函数、静态成员函数或构造函数。(2)如果在派生类中要对基类中声明的某个函数进行重写,建议将基类中相应的函数定义为虚函数,在派生类中重写的函数若要保持虚函数的特性,关键字virtual可省略。(3)在派生类中重写虚函数时,函数原型与基类中的函数原型要完全相同才能保持器虚函数的特性,即函数的返回值类型、函数名、函数的参数个数及类型都要和基类中的完全一样,否则,在派生类中该函数将自动丧失虚函数的特性。(4)一个虚函数无论被公有继承多少次,它仍然保持虚函数的特性。(5)动态多态是通过基类的指针或引用来访问虚函数,如果用对象名的形式来访问虚函数,将采用静态编译,即编译器将根据对象的类型就可确定访问的是哪个函数。7.1虚函数提示:基类的指针或引用指向派生类对象时,要实现多态,其访问的函数需要在基类和派生类中均为虚函数,否则不能实现多态。【例7-2】验证要实现多态,访问的函数必须在基类和派生类中同为虚函数。Seventh_2.cpp,比较该程序结果与Seventh_1_2.cpp的结果提示:C++中不能定义虚构造函数,因为开始调用构造函数时对象还没有实例化,但可以定义虚析构函数,而且通常把析构函数声明成虚析构函数。虚析构函数的定义格式如下:
seventh_3.cpp(非虚析析构案例)virtual~类名(){...}:seventh_3_2.cpp(虚析构案例)请对比以上两个程序的运行结果。7.1虚函数【例7-4】动态多态综合案例。一个虚函数,不管被子孙后代继承多少次,只要保持函数原型不变,则它的虚函数特性不变。Seventh_4.cpp提示:虚函数只要在基类的子孙后代中保持函数原型不变,则它的虚函数的特性将一直遗传下去。7.2纯虚函数
有时,定义一个类的目的只是想要为它的子孙后代提供一个统一的接口,这种类中声明的一些函数可能无法给出具体的函数实现,具体的函数实现往往需要留给它的子孙辈的类去实现,这时就可以定义相关函数为纯虚函数,纯虚函数定义的一般语法为:
virtual返回值类型
函数名(函数参数列表)=0;包含有纯虚函数的类叫做抽象类。若一个类的所有成员函数都是纯虚函数,则这个类叫纯抽象类。7.2纯虚函数-抽象类抽象类的说明:(1)抽象类只能作为其它类的基类,不能建立抽象类的对象。因为它的纯虚函数没有实现。(2)抽象类的对象不能作为函数的参数、函数的返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童抽动障碍共患注意缺陷多动障碍诊断与治疗专家共识重点2026
- 儿童抽动障碍共患多动障碍诊疗共识2026
- 微创三维重建规划手术
- 2026年电力设施检修保养合同二篇
- 2021年BOPP 薄膜行业研究报告
- 幼儿园中班社会教案 -《找朋友》
- 2026沪教版七下【Unit1-4】【专项练习】专题06+单项选择80题(1-4单元词语辨异)
- GBT 3181-2008 漆膜颜色标准
- 任务1.2桥梁的组成和分类
- 任务3.1桥梁墩台构造
- 2026-2030全球及中国氮化镓功率芯片行业前景动态与投资盈利预测报告
- 西藏自治区日喀则市2026届高三第二次模拟考试语文试卷含解析
- 2026年酒店住宿O2O线上线下融合的预订与入住体验
- 2025秋季《中华民族共同体概论》期末综合考试-国开(XJ)-参考资料
- 2025年贵州省遵义市中小学生“π”节数学思维竞赛初赛ZYMC2数学试卷(六年级)(含解析)
- 2024年湖北省中考地理生物试卷(含答案)
- 竞价采购文件示范文本
- 试验室温湿度记录表
- 中建全套通风与空调工程施工方案
- 网络渗透测试与网络设备安全 课件全套 第1-4章:网络安全基础-常见网络设备安全部署案例
- 团课考试试卷答案
评论
0/150
提交评论