- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 虚函数与多态性
主讲:李政伟
2
第12章 虚函数与多态性
12.1 多态性的概念
12.2 虚函数的定义
12.3 抽象类
12.4 实例研究
3
多态性是OOP的重要特征之一。
多态一词最初来源于希腊语Polumorphos,含义是具有多种形式或形态的情形。
多态性:发出同样的消息被不同类型的对象接收时会导致完全不同的行为。
多态性:父类型具有“引用由它派生的任何子类型”的能力。
多态的实现途径
函数重载
运算符重载
虚函数
12.1 多态性(polymorphism)的概念
静态多态
动态多态
4
函数重载:在同一作用域内的多个函数采用相同名字,只要使用不同类型、不同数目的参数。
作为重载函数:
(1)至少在参数个数、参数类型上有所不同。
(2)使用缺省函数参数要注意二义性。
如: void print(int a,int b);
void print(int a,int b,int c=50);
print(10,100);
12.1 多态性(polymorphism)的概念
5
12.1 多态性(polymorphism)的概念
运算符重载:对已有的运算符赋予多重含义。
必要性
C++中预定义运算符其运算对象只能是标准数据类型,而不适用于用户自定义类型(如类)。
实现机制
将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参。
8
Rectangle::Rectangle(double i, double j, double k, double l) : Point(i,j)
{ w=k; h=l; }
void fun(Point Pref)
{ coutArea=Pref.Area()endl; }
void main()
{
Rectangle rec(3.0, 6.0, 15.0, 20.0);
fun(rec);
}
例12.1非虚函数举例
注意事项
派生类对象指针使用时应注意的问题:
(1)声明为指向基类对象的指针可以指向它的公有派生类的对象,但不允许指向它的私有派生类的对象。
(2)允许声明为指向基类对象的指针指向它的公有派生类的对象,但不允许将一个声明为指向派生类对象的指针指向基类的对象。
(3)声明为指向基类对象的指针,当其指向它的公有派生类的对象时,只能直接访问派生类中从基类继承下来的成员,不能直接访问公有派生类中定义的成员。要想访问其公有派生类中的成员,可将基类指针用显式类型转换方式转换为派生类指针。
10
12.3 虚函数
12.3.1 虚函数的作用
同一类中不能定义名字,参数个数和类型都相同的函数,不能“重复定义”。
不同层次中可以出现名字、参数个数和类型都相同而功能不同的函数。系统按照同名覆盖的原则决定调用对象。
rc1.area( ) //派生类Rectangle的成员函数。
rc1.Point::area( ) //基类Point的成员函数
Pref.area( )
11
虚函数的声明形式
virtual 函数类型 函数名(参数列表)
{ 函数体 }
成员函数,非static成员函数
有继承性,基类中定义了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
作用:通过基类指针或引用调用执行时根据指针指向的对象类型动态决定调用哪个函数。
12.3 虚函数
12
class A{
public:
virtual void display()
{cout“A::display();}
};
class B: public A
{ public:
void display() //自动成为虚函数
{ cout“B::display(); }
};
class C: public B
{ public:
void display() //自动成为虚函数
{ cout“C::display()endl;}
};
void fun(A *ptr)
{ptr-display(); }
void main()
{ A a1, *p;
B b1;
C c1;
p=a1;
fun(p);
p=b1;
fun(p);
p=c1;
fun(p);
}
13
虚函数的使用方法
(1) 基类中用virtual声明其为虚函数
(2) 要求函数名、返回类型、参数个数和类型全部与基类的虚函数相同,根据需要重新定义函数体。
(3) 定义一个指向基类对象的指针变量,使它指向同一类族中要调用该函数的对象。
(4) 通过该指针变量调用此虚函数,调用的是指针变量指向的对象所属类的同名函数。
例12.2 基类与派生类中有同名函数
14
函数重载可用于普
您可能关注的文档
- 第10节-环境报道和灾难报道 《新闻写作》 教学文稿.ppt
- 第10讲 自然数 北京大学计算机系离散数学讲义(ppt版)培训资料.ppt
- 第10讲 PCB设计基础及实训 Protel DXP2004 SP2印制电路板设计 讲解材料.ppt
- 第10讲 主板故障分类 计算机硬件维修 讲解材料.ppt
- 第10讲 国际收支调节理论(一) 国际金融 幻灯片课件.ppt
- 第10讲 抗衰落技术 知识(三) 现代移动通信ppt(新版教材课件).ppt
- 第10讲 数据的统计分析与 及描述 数学建模与 及数学实验(第3版)课件+matlab.ppt
- 第10讲 车间作业计划(PAC)的编制 ERP教学文稿.ppt
- 第10讲-第3章 节 零件的加工工艺⑤成形-3.3.1板材的压弯.ppt
- 第10讲:图片中心 动易网站系统 教学文稿.ppt
- 第12章 节 -生命体征的评估及护理1 .ppt
- 第12章 节 Excel公式与函数的应用 中文版Office 2003.pptx
- 第12章 节 Linux网络服务器配置( Linux实用教程).ppt
- 第12章 节 Simulink仿真案例.ppt
- 第12章 节 _炎症的分子机制 .ppt
- 第12章 节 动作的制作(Photoshop CC图像处理基础教程(第4版)).ppt
- 第12章 节 动作的制作(Photoshop CS3图像处理).ppt
- 第12章 节 图象编码方法(数字图像处理).ppt
- 第12章 节 影片的输出 中文版Premiere影视制作从入门到精通课件.pptx
- 第12章 节 直观清晰的图表 中文版Excel 2010从入门到精通课件.pptx
文档评论(0)