C++大学基础教程第十一章_wang.ppt

C++大学基础教程第十一章_wang.ppt

ID:49311744

大小:271.00 KB

页数:50页

时间:2020-02-03

C++大学基础教程第十一章_wang.ppt_第1页
C++大学基础教程第十一章_wang.ppt_第2页
C++大学基础教程第十一章_wang.ppt_第3页
C++大学基础教程第十一章_wang.ppt_第4页
C++大学基础教程第十一章_wang.ppt_第5页
资源描述:

《C++大学基础教程第十一章_wang.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++大学基础教程第11章多态性北京科技大学信息基础科学系2021/7/171北京科技大学多态性(Polymorphism)是面向对象程序设计的主要特征之一。多态性对于软件功能的扩展和软件重用都有重要的作用。是学习面向对象程序设计必须要掌握的主要内容之一。2第十一章多态性11.1多态性的概念11.2继承中的静态联编11.3虚函数和运行时的多态11.4纯虚函数和抽象类11.5继承和派生的应用11.6模板311.1多态性的概念2021/7/174北京科技大学11.1.1面向对象程序设计中多态的表现总的来说,不同对象对

2、于相同的消息有不同的响应,就是面向对象程序设计中的多态性。具体在程序中,多态性有两种表现的方式:同一个对象调用名字相同、但是参数不同的函数,表现出不同的行为。在同一个类中定义的重载函数的调用,属于这种情况。不同的对象调用名字和参数都相同的函数,表现出不同的行为。在派生类的应用中,经常会看到这样的调用。511.1.1面向对象程序设计中多态的表现面向对象程序设计中多态性表现为以下几种形式:重载多态:通过调用相同名字的函数,表现出不同的行为。运算符重载也是一种重载多态。运行多态:通过基类的指针,调用不同派生类的同名函数

3、,表现出不同的行为。许多面向对象程序设计的书籍中所说的多态性,就是这种多态。模板多态,也称为参数多态:611.1.2多态的实现:联编一个具有多态性的程序语句,在执行的时候,必须确定究竟是调用哪一个函数。也就是说,在执行的时候调用哪个函数是唯一地确定的。确定具有多态性的语句究竟调用哪个函数的过程称为联编(Binding),有的资料也翻译成“绑定”。711.1.2多态的实现:联编联编有两种方式:静态联编和动态联编。在源程序编译的时候就能确定具有多态性的语句调用哪个函数,称为静态联编。对于重载函数的调用就是在编译的时候

4、确定具体调用哪个函数,所以是属于静态联编。811.1.2多态的实现:联编动态联编则是必须在程序运行时,才能够确定具有多态性的语句究竟调用哪个函数。用动态联编实现的多态,也称为运行时的多态。911.2继承中的静态联编2021/7/1710北京科技大学11.2.1派生类对象调用同名函数在派生类中可以定义和基类中同名的成员函数。这是对基类进行改造,为派生类增加新的行为的一种常用的方法。通过不同的派生类的对象,调用这些同名的成员函数,实现不同的操作,也是多态性的一种表现。在程序编译的时候,就可以确定派生类对象具体调用哪个

5、同名的成员函数。这是通过静态联编实现的多态。11例11.1定义Circle类和Rectangle类为Shape类的派生类,通过Circle类和Rectangle类的对象调用重载函数getArea()显示对象的面积。//例11.1:shape.h#ifndefSHAPE_H#defineSHAPE_HclassShape{public:doublegetArea()const;voidprint()const;};//Shape类定义结束12classCircle:publicShape{public:Circle

6、(int=0,int=0,double=0.0);doublegetArea()const;//返回面积voidprint()const;//输出Circle类对象private:intx,y;//圆心座标doubleradius;//圆半径};//派生类Circle定义结束classRectangle:publicShape{public:Rectangle(int=0,int=0);//构造函数doublegetArea()const;//返回面积voidprint()const;//输出Rectangle类

7、对象private:inta,b;//矩形的长和宽};//派生类Rectangle定义结束#endif13//例11.1:shape.cpp#includeusingnamespacestd;#include"shape.h"doubleShape::getArea()const{cout<<"基类的getArea函数,面积是";return0.0;}//Shape类getArea函数的定义voidShape::print()const{cout<<"BaseclassObject"<

8、l;}//Shape类print函数定义基类成员函数的定义14Circle::Circle(intxValue,intyValue,doubleradiusValue){x=xValue;y=yValue;radius=radiusValue;}//Circle类构造函数doubleCircle::getArea()const{cout<<"Circle类的getArea

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

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

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