第六单元多态性与虚函数.pptVIP

第六单元多态性与虚函数.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六单元多态性与虚函数

第六章 多态性与虚函数 6.1多态性的概念 6.2一个典型的例子 6.3虚函数 6.4纯虚函数与抽象类 /TERM/P/polymorphism.html Generally, the ability to appear in many forms. In object-oriented programming, polymorphism refers to a programming languages ability to process objects differently depending on their data type or class. More specifically, it is the ability to redefine methods for derived classes. For example, given a base class shape, polymorphism enables the programmer to define different area methods for any number of derived classes, such as circles, rectangles and triangles. No matter what shape an object is, applying the area method to it will return the correct results. Polymorphism is considered to be a requirement of any true object-oriented programming language (OOPL). 6.1 多态性的概念 在C++ 程序设计中,多态性是指具有不同功能的函数可以用一个函数名,在面向对象方法中这样描述多态性:向不同的对象发送同一个消息,它们接收后会产生不同的行为(即方法)。 多态性:是指同样的消息被不同的对象接收时导致的不同行为。 消息是指对类的成员函数的调用; 不同的行为是指不同的实现,也就是调用了不同的函数。 例如:加法算符”+”的多态性: int a,b,c; c=a+b; float a,b,c; c=a+b; double a,b,c; c=a+b; 多态性分类 面向对象设计语言一般具有两类多态性: 静态多态:在编译程序时系统就可以确定调用哪个函数,因此静态多态性又称编译时的多态性。静态多态性是通过函数重载实现的,函数名相同但是参数类型个数各不相同。 动态多态性:在程序运行中才能确定调用哪个函数。又称运行时的多态性。动态多态性是通过继承和虚函数实现的,通过指向基类的指针调用函数。至于能够调用到哪个函数,完全有运行期间指针指向的是什么对象来决定。 本章要研究的问题 引入动态多态性是为了实现表达的独立性,对于同一个函数用同样的名字,但是系统运行时会根据上下文环境自动选择合适的目标函数进行动态调用。 从一个基类派生出不同的派生类时,各派生类可以使用与基类成员相同的函数名,但是在各个派生类中有不同的含义,如果在运行时用相同的函数名调用类的函数,哪个类的函数会被调用? 一个说明问题的例子 #include iostream.h class A {public: void display() //virtual {couti am in class A:endl; } }; class B:public A {public: void display() {couti am in class B:endl; } }; 6.2 一个典型的例子 例6.1 先建立一个点类(point),有数据成员x,y(坐标)。以它为基类派生一个圆类,增加数据成员r(半径),再以圆为直接基类派生出一个圆柱体类,再增加数据成员h(高)要求重载运算符和使之能输出以上的类对象。 (1)声明基类point类 #include iostream.h class Point {public: Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;} float getY() const {return y;} friend ostream operator(ostream ,const Point ); protected: float x,y; }; Point的成员函数定义 Point::Point(float a,float b)

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档