《面向对象程序设计》多态.ppt
《《面向对象程序设计》多态.ppt》由会员分享,可在线阅读,更多相关《《面向对象程序设计》多态.ppt(45页珍藏版)》请在三一办公上搜索。
1、2023/11/9,北京科技大学计算机系,1,C+大学基础教程,第10章 多态性 北京科技大学 计算机系,2023/11/9,北京科技大学计算机系,-2-,第十一章 多态性,11.1 多态性的概念 11.2 继承中的静态联编 11.3 虚函数和运行时的多态 11.4 纯虚函数和抽象类,2023/11/9,北京科技大学计算机系,-3-,多态性的概念,多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时导致不同的行为。擦 地板 窗户 脸,采用不同的工具,不同的方式。在c+中可以用相同的函数名,不同的函数操作来实现,函数重载:函数名相同,但是函数的参数个数或者参数类
2、型不同,或者const标识,2023/11/9,北京科技大学计算机系,-4-,面向对象程序设计中多态的表现,总的来说,不同对象对于相同的消息有不同的响应,就是面向对象程序设计中的多态性。具体在程序中,多态性有两种表现的方式:同一个对象调用名字相同、但是参数不同的函数,表现出不同的行为。重载多态 在同一个类中定义的重载函数的调用。不同的对象调用名字和参数都相同的函数,表现出不同的行为。-运行多态 在派生类中重复定义 同名覆盖:使用派生类的定义 作用域符的使用:使用基类的定义,2023/11/9,北京科技大学计算机系,-5-,继承和派生中的多态,class A public:void f();cl
3、ass C:public A public:void f();void f(int x);,如果声明:C c1;则 c1.f();c1.f(int x);c1.A:f(),2023/11/9,北京科技大学计算机系,-6-,面向对象程序设计中多态的表现,面向对象程序设计中多态性表现为以下几种形式:重载多态:通过调用相同名字的函数,表现出不同的行为。运行多态:通过基类的指针或引用,调用不同派生类的同名函数,表现出不同的行为。许多面向对象程序设计的书籍中所说的多态性,就是这种多态。模板多态,也称为参数多态:通过一个模板,得到不同的函数或不同的类。这些函数或者类具有不同的特性和不同的行为。,2023/
4、11/9,北京科技大学计算机系,-7-,多态性的概念,例1int max(int a,int b)return ab?a:b;int max(int a,int b,int c)return(int t=(ab?a:b)c?t:c;float max(float a,float b)void main()int a,b,f;float c,d;max(a,b);max(c,d);,在编译的时候,确定调用的是哪个max,静态联编;,函数重载,2023/11/9,北京科技大学计算机系,-8-,继承和派生中的多态,class A public:void f();class C:public A pu
5、blic:void f();void f(int x);,如果声明:C c1;则 c1.f();c1.f(int x);c1.A:f(),静态联编;,2023/11/9,北京科技大学计算机系,-9-,派生类对象调用同名函数,对于派生类对象调用成员函数,可以有以下的结论:派生类对象可以直接调用本类中与基类成员函数同名的函数,不存在二义性;在编译时就能确定对象将调用哪个函数,属于静态联编,不属于运行时的多态。,2023/11/9,北京科技大学计算机系,-10-,赋值兼容原则,一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:derived d;base b;派生类的对象可以
6、被赋值给基类对象。b=d;派生类的对象可以初始化基类的引用。base,2023/11/9,北京科技大学计算机系,-11-,赋值兼容规则举例-多态是否具有动态性,#include class B0/基类B0声明 public:void display()coutB0:display()endl;/公有成员函数;,定义了基类,2023/11/9,北京科技大学计算机系,-12-,class B1:public B0 public:void display()coutdisplay();/对象指针-成员名,定义了类族,定义了基类的对象指针,2023/11/9,北京科技大学计算机系,-13-,void
7、main()/主函数B0 b0;/声明B0类对象B1 b1;/声明B1类对象D1 d1;/声明D1类对象B0*p;/声明B0类指针p=,B0:display(),B0:display(),B0:display(),2023/11/9,北京科技大学计算机系,-14-,概念复习,根据赋值兼容规则,下列哪一个陈述是正确的?【】公有派生类的对象可以赋值给基类的对象。任何派生类的对象可以赋值给基类的对象。基类的对象可以赋值给派生类的对象。间接基类的对象可以赋值给直接基类的对象。,2023/11/9,北京科技大学计算机系,-15-,多态的实现:联编,联编(Binding绑定):确定具体的操作对象。程序自身
8、彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。静态联编:编译的多态动态联编:运行时的多态,int a;main()int a;a=7;,2023/11/9,北京科技大学计算机系,-16-,静态联编与动态联编,静态联编(静态束定)联编工作出现在编译阶段,用对象名或者类名来限定要调用的函数。动画动态联编联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。,例,例,2023/11/9,北京科技大学计算机系,-17-,#includeclass Point public:Point(double i,double j)x=i;y=j;double Area()return 0
9、.0;private:double x,y;class Rectangle:public Point public:Rectangle(double i,double j,double k,double l);double Area()return w*h;private:double w,h;,静态联编例,2023/11/9,北京科技大学计算机系,-18-,Rectangle:Rectangle(double i,double j,double k,double l):Point(i,j)w=k;h=l;void fun(Point 运行结果:Area=0,X,inaceesible,Y,i
10、naceesible,W,private,H,private,15.0,25.0,3.0,5.2,2023/11/9,北京科技大学计算机系,-19-,例11.1 定义Circle类和Rectangle类为Shape类的派生类,通过Circle类和Rectangle类的对象调用重载函数getArea()显示对象的面积。/例11.1:shape.h#ifndef SHAPE_H#define SHAPE_Hclass Shape public:double getArea()const;void print()const;/Shape类定义结束,基类Shape的定义,课下读懂!,2023/11/9
11、,北京科技大学计算机系,-20-,#includeclass Point public:Point(double i,double j)x=i;y=j;virtual double Area()return 0.0;private:double x,y;class Rectangle:public Point public:Rectangle(double i,double j,double k,double l);virtual double Area()return w*h;private:double w,h;void fun(Point,动态联编例,虚函数,运行结果:Area=375,
12、运行结果:Area=0,声明虚函数的目的就是通知编译器,碰到函数名时不要马上选择静态联编,也有可能时动态联编的。,2023/11/9,北京科技大学计算机系,21,虚函数和运行时的多态,2023/11/9,北京科技大学计算机系,-22-,虚函数,虚函数是动态联编的基础。是非静态的成员函数。在类的声明中,在函数原型之前写virtual。virtual 只用来说明类声明中的原型,不能用在函数实现时。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。本质:不是重载声明而是覆盖。调用方式:通过基类指针或引用,执行时会根据指针或引用指向的对象的类,决定调用哪个函数。,2023
13、/11/9,北京科技大学计算机系,-23-,例,#include class B0/基类B0声明public:/外部接口virtual void display()coutB0:display()endl;/虚成员函数;,2023/11/9,北京科技大学计算机系,-24-,class B1:public B0/公有派生 public:void display()coutB1:display()endl;class D1:public B1/公有派生 public:void display()coutD1:display()endl;,2023/11/9,北京科技大学计算机系,-25-,void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 面向 对象 程序设计 多态
链接地址:https://www.31ppt.com/p-6529533.html