第6章 多态性及虚函数_第1页
第6章 多态性及虚函数_第2页
第6章 多态性及虚函数_第3页
第6章 多态性及虚函数_第4页
第6章 多态性及虚函数_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章多态性与虚函数n本章重点:本章重点:多态、虚函数的概念和解决的问题内容:内容:5.1 5.1 多态的概念多态的概念 5.2 5.2 虚函数的概念虚函数的概念 5.3 5.3 虚函数的应用虚函数的应用 5.4 5.4 纯虚函数和抽象类纯虚函数和抽象类6.1 6.1 多态性的概念多态性的概念一、多态性是面向对象程序设计的一个重要特征n定义:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。n所谓消息即函数调用,即同一函数有不同的实现二、静态多态性与动态多态性静态多态性编译时的多态性静态多态性编译时的多态性常见的有函数重载与运算符重载常见的有函数重载与运算符重载动态多态性运行时的

2、多态性动态多态性运行时的多态性通过虚函数实现通过虚函数实现例-1基类oint有数据成员x,y。泒生类Circle,有新数据成员r,Circle的派生类Cylinder,有新成员h。重载运算符“”和“”用于输出对象例5-1类的结构与层次Circle类Point类Cylinder类radiusheightx,ysetPoint;getX()getY()setRadiusgetRadiusarea()setHeightgetheightarea();volume();int main()Cylinder cy1;Point &p = cy1;/ Point *p = &cy1;cout pRef;

3、/输出PointCircle &p2 = cy1;cout p2; /输出Circlereturn 0;6.1.2 静态关联与动态关联n静态关联静态关联:通过对象名调用的虚函数,在编译时即可确定其调用的虚 函数属于那个类。n动态关联:动态关联:通过基类指针调用的虚函数,在运行阶段把虚函数和类对象绑定在一起。n虚函数提供了一种更为灵活虚函数提供了一种更为灵活的多态性机制。虚函数允许函数的多态性机制。虚函数允许函数调用与函数体之间的联系在运行调用与函数体之间的联系在运行时才建立,也就是在运行时才决时才建立,也就是在运行时才决定如何动作,即所谓的定如何动作,即所谓的动态联编动态联编 6.2 6.2

4、虚函数的概念虚函数的概念 用同一个调用形式,既能调用派生类的函数又能调用基类的同名函数 一个基类指针可以调用同一类族中不同的虚函数 5.2.1 虚函数的作用CShapCShapCEllipsCEllipsCCircleCCircleCTriangleCTriangleCRectCRectCSquareCSquareint main() CShapaShap; CEllipseaEiiips; CCircleaCircle; CTriangleaTriangle; CRectaRect; CSquareaSquare; CShap* pShap6 = &aShap, &aEiiips, &aCi

5、rcle, &aTriangle, &aRect, &aSquare;for (int i=0; idisplay(); return 0;输出结果:输出结果: Shap Shap Ellips Ellips Circle Circle Triangle Triangle Rect Rect Square Square示例5-25.2.3 虚函数与重载函数的关系 v 在一个派生类中重新定义基类的虚函数是函数重载的另一种形式,但它不同于一般的函数重载。v 普通的函数重载时,其函数的参数或参数类型必须有所不同,函数的返回类型也可以不同。 v当重载一个虚函数时,也就是说在派生当重载一个虚函数时,也就

6、是说在派生类中重新定义虚函数时,要求函数名、类中重新定义虚函数时,要求函数名、返回类型、参数个数、参数的类型和顺返回类型、参数个数、参数的类型和顺序与基类中的虚函数原型完全相同。序与基类中的虚函数原型完全相同。v如果仅仅返回类型不同,其余均相同,如果仅仅返回类型不同,其余均相同,系统会给出错误信息系统会给出错误信息;v若仅仅函数名相同,而参数的个数、类若仅仅函数名相同,而参数的个数、类型或顺序不同,系统将它作为普通的函型或顺序不同,系统将它作为普通的函数重载,这时将丢失虚函数的特性。数重载,这时将丢失虚函数的特性。5.3 5.3 虚析构函数虚析构函数 n当派生类的对象从内存中撤销时,一般先调用

7、派生类的析构函数,再调用基类的析构函数 。n但是:例5-3n我们发现派生类没有被析构n把基类的析构函数改为虚函数后,派生类就也析构了n小结:(1)基类为虚析构函数时,对于指向同一族类的指针,撤消对象时系统会动态关联,调用相应的析构清理所有的对象。(2)如果基类为虚析构函数,它的派生类都自动成为虚析构函数。(3)要习惯在基类声明一个空的虚析构函数。6.4 6.4 纯虚函数和抽象类纯虚函数和抽象类6.4.1 6.4.1 纯虚函数纯虚函数 纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中必须定义自己的版本,或重新说明为纯虚函数。 纯虚函数的定义形式如下: virtual 函数类型 函数名(参数表)=0;例6-4 5.4.2 抽象类抽象类n如果一个类至少有一个纯虚函数,那么就称该类为抽象类。n抽象类只能作为其他类的基类来使用,不能建立抽象类对象,其纯虚函数的实现由派生类给出。 本章小结本章小结n成员函数在派生类中需要重新定义n以单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论