c多态性最新完整版本.pptVIP

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

第十二章多态性长安大学杨建华本章主要内容多态性虚函数纯虚函数抽象类多态性的概念多态性是面向对象程序设计的重要特征之一,用于问题处理的灵活性。多态性是指发出同样的消息被不同类型的对象接收可能导致完全不同的行为与过程。C++多态的实现:函数重载/(运算符重载)虚函数静态绑定与动态绑定绑定程序自身彼此关联的过程,确定程序中的函数调用与执行该函数的代码间的关系。静态绑定绑定过程出现在编译阶段,用对象名或者类名来限定要调用的函数(重载/对象的一般操作)。动态绑定绑定过程工作在程序运行时执行,在程序运行时才确定将要调用的函数。#includeiostream.hclassPoint{public: Point(doublei,doublej){x=i;y=j;} doubleArea()const{return0.0;}private: doublex,y;};classRectangle:publicPoint{public: Rectangle(doublei,doublej,doublek,doublel); doubleArea()const{returnw*h;}private: doublew,h;};Rectangle::Rectangle(doublei,doublej,doublek,doublel):Point(i,j){ w=k;h=l;}voidfun(Points){ coutArea=s.Area()endl;}intmain(){ Rectanglerec(3.0,5.2,15.0,25.0); fun(rec);}运行结果:Area=0//note:fun函数的参数是point类型引用。//静态联编/绑定?编译时的多态性#includeiostreamclassPoint{public: Point(doublei,doublej){x=i;y=j;} virtualdoubleArea(){return0.0;}//可被覆盖private: doublex,y;};classRectangle:publicPoint{public: Rectangle(doublei,doublej,doublek,doublel); doubleArea(){returnw*h;}//重新定义private: doublew,h;};//其他函数同上例voidfun(Points){ coutArea=s.Area()endl;}intmain(){ Rectanglerec(3.0,5.2,15.0,25.0); fun(rec);}运行结果:Area=375//动态联编/绑定?运行时的多态性虚函数虚函数是动态绑定(动态联编)的基础。非静态的公有成员函数可声明为虚函数。在基类的函数声明中,在函数声明之前写virtual。virtual只用于描述类声明中的原型,不能用在函数实现时。具有继承性,基类中声明的虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。派生类重新定义的本质:不是重载,而是重新定义。调用方式:通过基类指针或引用(做参数),执行时会根据指向的对象的类,决定调用哪个函数定义,从而实现动态的多态性。若指针指向公有派生类对象,则先使用派生类重新定义覆盖基类中相关虚函数定义,再调用。(修正案)对本(基)类的函数/对象而言,虚函数与一般函数无任何区别。例12-1#includeiostream.hclassB0 //基类B0声明{public: //外部接口 virtualvoiddisplay()//虚成员函数{coutB0::display()endl;}};classB1:publicB0 //公有派生{public:voiddisplay(){coutB1::display()endl;}};classD1:publicB1 //公有派生{public: voiddisplay(){coutD1::display()endl;}};voidfun(B0*ptr) //普通函数{ptr-display();

文档评论(0)

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

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

1亿VIP精品文档

相关文档