面向对象程序设计第九章多态性

面向对象程序设计第九章多态性

ID:38816060

大小:1.55 MB

页数:49页

时间:2019-06-19

面向对象程序设计第九章多态性_第1页
面向对象程序设计第九章多态性_第2页
面向对象程序设计第九章多态性_第3页
面向对象程序设计第九章多态性_第4页
面向对象程序设计第九章多态性_第5页
资源描述:

《面向对象程序设计第九章多态性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第九章多态性§9.1静态联编和动态联编§9.2虚函数§9.3纯虚函数和抽象类§9.4虚析构函数§9.5运算符的重载面向对象程序设计语言的三大特性:封装性继承性多态性指同一个接口名称有多种功能用户单一接口名称功能1功能n…多态性是指类中同一函数名对应多个具有相似功能的不同函数,可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性重载多态专用多态强制多态多态参数多态通用多态包含多态多态性分类示意图从实现的角度划分多态:编译时多态:编译时多态是指在编译阶段由编译系统根据程序的操作数据确定具体调用哪一个同名函数。

2、运行时多态:运行时多态是指在程序运行过程中根据产生的信息动态地确定需要调用哪一个同名函数。§9.1静态联编和动态联编静态联编是指在程序编译连接阶段出现的联编工作,又称为早期联编。一、静态联编在编译时所进行的这种联编又称静态绑定(静态束定)。绑定(束定)是指确定所调用的函数与执行函数代码之间的关系。函数重载运算符重载编程实现求图形面积例§9.1静态联编和动态联编动态联编是指在程序运行时进行的联编工作,又称为晚期联编。二、动态联编继承虚函数§9.2虚函数虚函数是动态联编的基础,是一种非静态的成员函数。定义格式如下:一

3、、虚函数的定义virtual<返回值类型><函数名>(<参数表>){<函数体>}注:如果某类中的一个成员函数被说明为虚函数,则意味着该成员函数在派生类中可能存在着不同的实现。编程实现求图形面积例§9.2虚函数二、虚函数的特性1.要求派生类中的虚函数与基类中的虚函数具有相同的参数个数,对应的参数类型相同和返回值类型相同。§9.2虚函数二、虚函数的特性2.基类中说明的虚函数具有自动向下传给它的派生类的性质。因此对派生类的虚函数中的virtual说明可以省略。§9.2虚函数二、虚函数的特性3.只有非静态的成员函数才可以

4、说明为虚函数。§9.2虚函数二、虚函数的特性4.构造函数不能说明为虚函数,但是析构函数可以说明为虚函数。分析下列程序,并回答问题例11.该程序的执行结果是什么?为什么?B::f1()called.不同类的对象调用各自的虚函数,称为运行时多态分析下列程序,并回答问题例1如果将A::f2()的实现改为:voidA::f2(){this->f1();}该程序的执行结果是什么?B::f1()called.分析下列程序,并回答问题例13.如果将A::f2()的实现改为:voidA::f2(){A::f1();}该程序的执行

5、结果是什么?A::f1()called.分析下列程序是否实现了动态联编例2该程序的执行结果是什么?为什么?Callingtext(b).B.i=22Callingtext(d).B.i=22分析下列程序的输出结果例3InB.InD.分析下列程序的输出结果例4InA::fun().InC::fun().一个函数被声明为虚函数,无论声明它的类被继承了多少层,在各层次的派生类中,该函数都保持虚函数的特性!§9.2虚函数总结动态联编实现的二个条件要有说明的虚函数;通过成员函数或通过指针与引用调用虚函数;§9.3纯虚函数和

6、抽象类纯虚函数是一种没有具体定义的特殊的虚函数。定义格式如下:一、纯虚函数virtual<返回值类型><函数名>(<参数表>)=0;在一个基类中说明一个纯虚函数,它不对应任何的具体实现,该虚函数的实现在它的派生类中。Line::Draw()called.Ellipse::Draw()called.§9.3纯虚函数和抽象类带有纯虚函数的类称为抽象类,它是一种特殊的类,是为了抽象和设计的目的而建立的。二、抽象类抽象类中至少含有一个纯虚函数。§9.3纯虚函数和抽象类二、抽象类抽象类只能用作其它类的基类,不能建立抽象类对

7、象。规定抽象类不能用作参数类型、函数返回值。3.可以说明指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。§9.3纯虚函数和抽象类二、抽象类4.如果一个抽象类的派生类中没有定义虚函数,只是继承了基类的纯虚函数,则这个派生类还是一个抽象类。如果一个抽象类中给出了基类纯虚函数的实现,这个派生类则是一个可以创建对象的具体类。规定§9.3纯虚函数和抽象类二、抽象类B,D1,D2,D3中那些是抽象类,那些是具体类例1classB{public:virtualvoidinit()=0;virtualvoidw

8、rite(char*p)=0;};classD1:publicB{public:virtualvoidinit(){…}};classD2:publicB{public:virtualvoidinit(){…}virtualvoidwrite(char*p){…}};classD3:publicD1{public:virtualvoidwrite(char*p){…}};

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。