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