第5章 多态性与虚函数课件.ppt

第5章 多态性与虚函数课件.ppt

ID:59208390

大小:149.50 KB

页数:50页

时间:2020-09-26

第5章 多态性与虚函数课件.ppt_第1页
第5章 多态性与虚函数课件.ppt_第2页
第5章 多态性与虚函数课件.ppt_第3页
第5章 多态性与虚函数课件.ppt_第4页
第5章 多态性与虚函数课件.ppt_第5页
资源描述:

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

1、第5章多态性与虚函数5.1多态性的概念5.2一个典型的例子5.3虚函数5.4纯虚函数与抽象类多态性(polymorphism)是面向对象程序设计的一个重要特征。利用多态性可以设计和实现一个易于扩展的系统。在C++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。5.1多态性的概念从系统实现的角度看,多态

2、性分为两类:静态多态性和动态多态性。运行时的多态性是指在程序执行之前,根据函数名和参数无法确定应该调用哪一个函数,必须在程序的执行过程中,根据具体的执行情况来动态地确定。编译时的多态性(函数重载)运行时的多态性(虚函数)多态性要研究的问题是:当一个基类被继承为不同的派生类时,各派生类可以使用与基类成员相同的成员名,如果在运行时用同一个成员名调用类对象的成员,会调用哪个对象的成员?有关静态多态性的应用已经介绍过了,在本章中主要介绍动态多态性和虚函数。下面是一个承上启下的例子。一方面它是有关继承和运算符重载内容的综合应用

3、的例子,通过这个例子可以进一步融会贯通前面所学的内容,另一方面又是作为讨论多态性的一个基础用例。5.2一个典型的例子例5.1先建立一个Point(点)类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle(圆)类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高)。要求编写程序,重载运算符“<<”和“>>”,使之能用于输出以上类对象。声明基类Point(2)声明派生类Circle(3)声明Circle的派生类CylinderclassPo

4、int{floatx,y;public:Point(){}Point(floati,floatj){x=i;y=j;}floatarea(void){return0.0;}};constfloatPi=3.14159;classCircle:publicPoint{//类Point的派生类floatradius;public:Circle(floatr){radius=r;}floatarea(void){returnPi*radius*radius;}};voidmain(void){Point*pp;//基类指针

5、,可以将派生类对象的地址赋给基类指针Circlec(5.4321);pp=&c;cout<area()<

6、。xShow()xShow()yShow()basep->Show();basep->Show()基类指针派生类对象基类对象在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。编译系统按照同名覆盖的原则决定调用的对象。在上例中如果用c.area()调用的是派生类Circle中的成员函数area。如果想调用直接基类Point的area函数,应当表示为:c.Point::area()。用这种方法来区分两个同名的函数。但是这样做很不方便。5.3虚函数5.3.1虚函数的作用能否用同一个

7、调用形式,既能调用派生类又能调用基类的同名函数。在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针调用它们。例如,用同一个语句“pt->display();”可以调用不同派生层次中的display函数,只需在调用前给指针变量pt赋以不同的值(使之指向不同的类对象)即可。C++中的虚函数就是用来解决这个问题的。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。classPoint{floatx,y;public:Point(){}Poi

8、nt(floati,floatj){x=i;y=j;}virtualfloatarea(void){return0.0;}};constfloatPi=3.14159;classCircle:publicPoint{//类Point的派生类floatradius;public:Circle(floatr){radius=r;}floatarea

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

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

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