面向对象程序设计第5章 多态性和虚函数课件.ppt

面向对象程序设计第5章 多态性和虚函数课件.ppt

ID:57188731

大小:59.00 KB

页数:40页

时间:2020-08-02

面向对象程序设计第5章  多态性和虚函数课件.ppt_第1页
面向对象程序设计第5章  多态性和虚函数课件.ppt_第2页
面向对象程序设计第5章  多态性和虚函数课件.ppt_第3页
面向对象程序设计第5章  多态性和虚函数课件.ppt_第4页
面向对象程序设计第5章  多态性和虚函数课件.ppt_第5页
资源描述:

《面向对象程序设计第5章 多态性和虚函数课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章多态性和虚函数继承性反映的是类与类之间的层次关系,多态性则是考虑这种层次关系以及类自身特定成员函数之间的关系问题,是解决行为的再抽象问题。多态性有两种表现形式:一种是不同的对象在收到相同的消息时,产生不同的动作,这主要通过虚函数来实现;另一种是同一对象收到相同的消息却产生不同的函数调用,这主要通过函数重载来实现。第5章多态性和虚函数5.1静态联编与动态联编5.2虚函数5.3成员函数中调用虚函数5.4构造函数和析构函数中调用虚函数5.5纯虚函数和抽象类5.6虚析构函数5.7应用实例5.1静态

2、联编与动态联编返回首页5.1.1静态联编5.1.2动态联编5.1.1静态联编多态性就是同一符号或名字在不同情况下具有不同解释的现象,即是指同一个函数的多种形态。C++支持两种多态性,编译时的多态性和运行时的多态性。对一个函数调用,要在编泽时或在运行时确定将其链接上相应的函数体的代码,这一过程称为函数联编(简称联编)。C++中有两种联编:静态联编和动态联编。5.1.1静态联编静态联编是指在程序编译连接阶段进行联编的。又称为早期联编。编译器根据源代码调用固定的函数标识符,然后由连接器接管这些标识符,

3、并用物理地址代替它们。5.1.1静态联编【例5.1】分析程序运行结果,理解静态联编的含义。5.1.1静态联编优点:速度快,运行时的开销仅仅是传递参数、执行函数调用、清除栈等。缺点:必须预测在每一种情况下,在所有的函数调用中,将要使用哪些对象。这不仅具有局限性,有时也是不可能的。5.1.1静态联编【例5.2】修改例5.1,分析程序运行结果来验证静态联编的问题。5.1.1静态联编返回本节5.1.2动态联编动态联编是指在程序运行时进行的联编。只有向具有多态性的函数传递一个实际对象时,该函数才能与多种可

4、能的函数中的一种联系起来。这种联编又称为晚期联编。在程序代码中要指明某个成员函数具有多态性要进行动态联编,用关键字virtual来标记。用关键字virtual标记的函数称为虚函数。5.1.2动态联编优点:提供了更好的编程灵活性、问题抽象性和程序易维护性。缺点:与静态联编相比,函数调用速度慢,这必须由代码本身在运行时刻推测调用哪个函数,然后再调用它。返回本节5.2虚函数返回首页5.2.1虚函数的作用5.2.2虚函数与一般重载函数的区别5.2.3继承虚属性5.2.1虚函数的作用虚函数的定义格式:vi

5、rtual〈返回值类型〉〈函数名〉(〈形式参数表〉){<函数体>}5.2.1虚函数的作用动态联编需要满足三个条件:类之间满足类型兼容规则要声明虚函数要由成员函数来调用或者是通过指针、引用来访问虚函数【例5.3】修改例5.2,分析程序运行结果,理解动态联编的含义。5.2.1虚函数的作用返回本节5.2.2虚函数与一般重载函数的区别虚函数与一般重载函数的区别:重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域中定义的名字相同的不同函数。而虚函数不仅要求函数名相同,而且要求函数的签名、返回类型

6、也相同。重载函数可以是成员函数或友员函数,而虚函数只能是非静态成员函数。5.2.2虚函数与一般重载函数的区别构造函数可以重载,析构函数不能重载。正好相反,构造函数不能定义为虚函数,析构函数能定义为虚函数。重载函数的调用是以所传递参数序列的差别作为调用不同函数的依据而虚函数是根据对象的不同去调用不同类的虚函数。重载函数在编译时表现出多态性,是静态联编;而虚函数则在运行时表现出多态性是动态联编。返回本节5.2.3继承虚属性基类中说明的虚函数具有自动向下传给它的派生类的性质。派生类中重定义基类的虚函数

7、称为覆盖。5.2.3继承虚属性【例5.4】示例继承虚属性5.2.3继承虚属性虚函数在派生类中被重新定义时,都应该满足覆盖的条件,只有覆盖才能保持虚特性。【例5.5】示例使用不恰当的虚函数的效果。5.2.3继承虚属性【例5.6】示例虚函数丢失虚特性的效果。5.2.3继承虚属性一个类中的虚函数说明只对派生类中重定义的函数有影响,对它的基类中的函数并没有影响。【例5.7】示例虚函数对它的基类中的函数的没有影响。5.2.3继承虚属性返回本节5.3成员函数中调用虚函数一个基类或派生类的成员函数中可以直接调

8、用该类等级中的虚函数。【例5.8】示例成员函数中调用虚函数的效果。5.3成员函数中调用虚函数返回首页5.4构造函数和析构函数中调用虚函数【例5.9】示例构造函数和析构函数中调用虚函数的效果。5.4构造函数和析构函数中调用虚函数返回首页5.5纯虚函数和抽象类返回首页5.5.1纯虚函数5.5.2抽象类5.5.1纯虚函数说明纯虚函数的一般形式:virtual〈返回值类型〉〈函数名〉(〈形式参数表〉)=0;纯虚函数的定义是在虚函数定义的基础上,再让函数等于0即可。这只是一种表示它是纯虚函数的形式,并不是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。