面向对象第五章优秀PPT.ppt
《面向对象第五章优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象第五章优秀PPT.ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象第五章第一页,本课件共有27页n本章的学习内容本章的学习内容多态性的概念多态性的概念静态联编和动态联编的概念静态联编和动态联编的概念虚函数的概念虚函数的概念抽象类的概念抽象类的概念 第二页,本课件共有27页 5.1 多态性的概念多态性的概念 n多态性多态性是指在类层次结构的相同类或不同类中是指在类层次结构的相同类或不同类中,可用可用相同的函数名实现功能不同的操作,从而可以使用相同的函数名实现功能不同的操作,从而可以使用相同的调用方式来调用这些具有不同功能的同名函相同的调用方式来调用这些具有不同功能的同名函数,实现不同情况下的不同操作。数,实现不同情况下的不同操作。如下图所示如下图所示。
2、第三页,本课件共有27页nC+C+的多态性可使同一条的多态性可使同一条消息,被不同类型的对象消息,被不同类型的对象接收时将产生不同的行为。接收时将产生不同的行为。n多态性是实现多态性是实现“一种接口,一种接口,多种方法多种方法”的技术。的技术。这里这里的的“一种接口一种接口”是指相同是指相同函数名和参数表,而函数名和参数表,而“多多种方法种方法”是指多种函数实是指多种函数实现,实现相似但不完全相现,实现相似但不完全相同的功能。同的功能。第四页,本课件共有27页nC+C+支持的多态可以分为两种类型:支持的多态可以分为两种类型:编译时多态编译时多态:在同一个类或不同类中可用相同:在同一个类或不同类
3、中可用相同的函数名和不同的参数表来实现不同的功能操的函数名和不同的参数表来实现不同的功能操作,编译系统在编译阶段就可以根据调用函数作,编译系统在编译阶段就可以根据调用函数的参数表来确定调用哪个同名函数。的参数表来确定调用哪个同名函数。class pointer int x,y;public:pointer(int cx,int cy)x=cx;y=cy;pointer(const pointer&p)x=p.x;y=p.y;void main()pointer ob1(40,50);pointer ob2=ob1;第五页,本课件共有27页运行时多态运行时多态:在类的继承层次结构中,不同层次的在
4、类的继承层次结构中,不同层次的类中可能具有同名但实现不同的函数,需要在运行类中可能具有同名但实现不同的函数,需要在运行阶段才能根据对象所属的层次来确定调用哪个类中阶段才能根据对象所属的层次来确定调用哪个类中的同名函数。的同名函数。第六页,本课件共有27页5.2 联编联编n多态性的实现过程中,把一个消息函数(多态性的实现过程中,把一个消息函数(如如student1.display()student1.display()与一个对象的具体函数与一个对象的具体函数体相联系的过程叫做体相联系的过程叫做联编(联编(bindingbinding)。n按照联编时所处阶段的不同,可以把联编分为按照联编时所处阶段
5、的不同,可以把联编分为静态联编静态联编和和动态联编动态联编,这两种联编过程分别对,这两种联编过程分别对应着多态性的两种实现方式。应着多态性的两种实现方式。5.2.1 静态联编静态联编 在编译阶段由编译系统根据调用函数的操作参在编译阶段由编译系统根据调用函数的操作参数来确定调用哪个同名函数数来确定调用哪个同名函数,并将函数调用与并将函数调用与该函数体连接起来该函数体连接起来.第七页,本课件共有27页例例5-1 静态联编静态联编#include class Student public:void print()cout“A student”endl;void print(int a)coutaen
6、dl;class GStudent:public Student public:void print()cout“A graduate student”print();ps=&s2;ps-print();A student A graduate student A student A student A student第九页,本课件共有27页5.2.2 动态联编动态联编n只有在运行程序时才能只有在运行程序时才能根据函数调用指令来根据函数调用指令来确定将确定将要调用的函数,这种在运行阶段进行的联编称为要调用的函数,这种在运行阶段进行的联编称为动动态联编态联编。例如,下例中用指针调用同名函数例如,
7、下例中用指针调用同名函数。第十页,本课件共有27页n动态联编的优点动态联编的优点是提供了更好的编程灵活性、是提供了更好的编程灵活性、问题的抽象性和程序的易维护性,缺点是与问题的抽象性和程序的易维护性,缺点是与静态联编相比,函数调用速度慢。(静态联编相比,函数调用速度慢。(如如 p-print();)n问题的抽象性:在实际应用中,编程人员不问题的抽象性:在实际应用中,编程人员不必过多地考虑类的层次关系,无须显式地写必过多地考虑类的层次关系,无须显式地写出虚函数的路径,只需将对象指针指向相应出虚函数的路径,只需将对象指针指向相应的派生类对象或引用相应的对象,通过动态的派生类对象或引用相应的对象,通
8、过动态联编就可以对消息做出正确的反应。联编就可以对消息做出正确的反应。(如如 p-print();)第十一页,本课件共有27页5.3 虚函数虚函数 虚函数是动态联编的基础。基类的虚函数经过派生虚函数是动态联编的基础。基类的虚函数经过派生之后,在类族中可以实现运行时的多态性。之后,在类族中可以实现运行时的多态性。5.3.1 虚函数的声明虚函数的声明 虚函数是一个在某基类中用虚函数是一个在某基类中用virtualvirtual声明的声明的,并在一个或并在一个或多个派生类中被重新定义的成员函数多个派生类中被重新定义的成员函数。声明虚函数的格式。声明虚函数的格式如下:如下:virtual ();一个函
9、数一旦声明为虚函数,则在每层派生类中,该一个函数一旦声明为虚函数,则在每层派生类中,该函数都保持虚函数特性。因此,在派生类中重新定义该函数都保持虚函数特性。因此,在派生类中重新定义该函数时,可以省略关键字函数时,可以省略关键字virtualvirtual。但为了程序的可。但为了程序的可读性,往往不省略。读性,往往不省略。第十二页,本课件共有27页5.3.2 虚函数的使用虚函数的使用n如果某类中的一个成员函数被说明为虚函数,如果某类中的一个成员函数被说明为虚函数,这就意味着该成员函数在派生类中可能有不这就意味着该成员函数在派生类中可能有不同的函数实现。同的函数实现。n当使用对象指针或对象引用调用
10、虚函数时,就当使用对象指针或对象引用调用虚函数时,就可实现动态联编,即在运行时进行关联或绑定。可实现动态联编,即在运行时进行关联或绑定。n定义一个基类的对象指针就可以指向不同派生类定义一个基类的对象指针就可以指向不同派生类的对象的对象,来调用不同派生类的来调用不同派生类的虚函数虚函数;(2);(2)只有通只有通过对象指针过对象指针或对象引用来调用或对象引用来调用虚函数虚函数,才能实现才能实现动态联编。动态联编。如果采用对象来调用虚函数如果采用对象来调用虚函数,则采用则采用的仍然是静态联编方式。的仍然是静态联编方式。第十三页,本课件共有27页例例5-2 静态联编和动态联编静态联编和动态联编#in
11、clude class Student public:virtual void print()cout“A student”endl;class GStudent:public Student public:virtual void print()cout“A graduate student”print();ps=&s2;ps-print();A student A graduate studentA studentA studentA graduate student第十五页,本课件共有27页使用虚函数时应注意:使用虚函数时应注意:(1 1)在派生类中重新定义虚函数时,必须保证函数在派生类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 第五 优秀 PPT
限制150内