C++程序设计第12章 多态性和虚函数教学课件.ppt
《C++程序设计第12章 多态性和虚函数教学课件.ppt》由会员分享,可在线阅读,更多相关《C++程序设计第12章 多态性和虚函数教学课件.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+程序设计第12章 多态性和虚函数教学课件C+程序设计标准课件第十四章 多态性和虚函数http:/ 本章内容提要 一、多态性 二、虚函数 三、纯虚函数与抽象类3http:/ 12.1 多态性 三、纯虚函数与抽象类 二、虚函数一、多态性4http:/ 12.1.1 多态性的概念 多态可以理解为在不同的情况下采取不同的行为。之前介绍过的重载就是多态的一种表现。无论是函数重载还是运算符重载都是在编译期和预处理期体现其多态性,又称静态多态性。而虚函数则是在运行时体现其多态性,又称动态多态性。它都会自动匹配相应的函数来完成相应的计算,这里就体现出了多态带来的好处和方便。多态性、数据抽象和继承体现了C+
2、作为面向对象程序设计语言的3个重要特征。多态性更多地强调了类型的概念,而不是简单地隐藏代码细节。它带来了一个接口多个方法的思想。例如,运算符“+”。不管是使用整型、单精度浮点型、双精度浮点型或者其他数据类型,5http:/ 12.1.2 函数、模板和宏的多态性 函数的多态是通过重载来实现的。重载函数之间函数名相同,但形参列表不同。调用被重载的函数时,通过形参列表来判断调用哪个函数。这个过程在编译时完成。【例12-1】函数的重载。#include using namespace std;int function(int a,int b)return a+b;int型形参,另一个函数有3个int型
3、形参。需要注意的是,形参列表一定不能相同,不然就是重定义,是错误的。运行结果为:int function(int a,int b,int c)return a+b+c;int main()cout function(1,2,3)endl;cout function(1,2);return 0;在【例12-1】中,函数function被重载,其中一个函数有2个6http:/ 12.1.2 函数、模板和宏的多态性 函数模板的多态性体现在根据传入参数的不同,选择匹配多个同名函数模板中的一个。这个过程由编译器实现。【例12-2】函数模板的多态性。#includeusing namespace std;
4、templatevoid function(A f)cout函数模板1endl;int型形参,另一个函数有3个int型形参。需要注意的是,形参列表一定不能相同,不然就是重定义,是错误的。运行结果为:templatevoid function(int f)cout函数模板2endl;int main()function(10);function(test);function(10.1);return 0;7http:/ 12.1.2 函数、模板和宏的多态性 宏的多态性体现在不同的情况下,其宏替代的含义不同。这些在预处理期间完成。【例12-3】宏的多态性。#define ADD(x,y)(x)+(
5、y)#includeusing namespace std;int main()coutADD(2,3)endl;/替换为(2)+(3)运行结果为:cout2*ADD(2,3)endl;/替换为2*(2)+(3)return 0;8http:/ 12.1.3 动态多态实例 在学习了类的派生之后,我们通常会将有相同性质的多个类作为同一个基类的派生类。每个派生类有其功能函数。我们常常需要根据实际情况来使用不同基类的功能函数。通过动态多态可以方便地实现该目的。【例12-4】向上类型转换。#include using namespace std;class Pet;int main()Pet*poin
6、t;Pet a;Dog b;point=&a;point-function();point=&b;point-function();return 0;运行结果:public:void function()cout Pet:function endl;class Dog:public Petpublic:void function(cout Dog:function endl;9http:/ 12.1.3 动态多态实例 说明:向上类型转换是指取一个派生类对象的地址(指针或引用)并将其作为基类的地址来处理。【例12-4】中使用基类指针分别指向了基类Pet的对象a和派生类Dog的对象b,并通过指针分
7、别调用它们的function函数。但是这里并没有达到目的,两次调用的都是基类中的function函数。另一种方法是使用虚函数,使用C+的多态性。将基类中的function函数声明为虚函数,就可以达到这个目的。要解决这个问题有两个办法。一是使用派生类指针指向派生类对象b,这样就能调用b中的function函数。但这个方法显然不方便,当有多个派生类时,判断是哪种派生类很麻烦,而且扩展性也不好,当有新的派生类加入时,就要重新编写判断的代码。10http:/ 12.1.3 动态多态实例 【例12-5】初探虚函数。#include using namespace std;class Petpublic:
8、virtual void function()cout Pet:function function();return 0;运行结果:void function()/对于虚函数的重写,不需要重复声明virtual关键字 cout Dog:function function();11http:/ 12.1.3 动态多态实例 C+中通过virtual关键字定义虚函数。方法如下。virtual 函数名(形参列表);例如:virtual int function();virtual void function1(int a,int b);需要注意的是,在派生类中对虚函数进行重写时,要求其函数名、形参列表
9、、返回类型完全相同,否则就是一个全新的函数。只要在基类中定义了虚函数,这个函数在所有的派生类中都是虚函数,不用重新强调。也可以在派生类中在该函数的声明前添加virtual关键字,这是合法的,但显得多余。12http:/ 12.2 虚函数 一、多态性 二、虚函数 三、纯虚函数与抽象类13http:/ 12.2.1 虚函数的作用 虚函数在使程序更加方便和易用的同时,也实现了类的扩展性和可维护性。【例12-6】虚函数带来的扩展性。/头文件main.h/其中数据为虚构#include using namespace std;class Petpublic:virtual void life()clas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计第12章 多态性和虚函数教学课件 C+ 程序设计 12 多态性 函数 教学 课件
限制150内