面向对象课件第八章.pptVIP

  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文档。上传文档
查看更多

§8.5虚函数指向基类的指针可以指向派生类对象(downcasting) 指向基类对象的指针指向派生类后,可以访问派生类对象的继承成员(但不能访问派生成员)基类派生类如:BASE*pobj;DERIVEDdobj;pobj=dobj; //基类对象的指针可以指向派生类第61页,共94页,星期日,2025年,2月5日§8.5虚函数downcasting带来的问题 classBASE { //…… intfun(); }; classDERIVED:publicBASE { //…… intfun(); };如果:pobj-fun(); //调用哪个类的函数?如果是静态绑定,就应调用BASE类的fun(),因为pobj是指向BASE类对象的指针,但现在pobj实际指向DERIVED类的对象,所以从道理上应调用DERIVED类的fun(),因此造成二者的矛盾第62页,共94页,星期日,2025年,2月5日§8.5虚函数解决的办法——virtual函数 classBASE { //…… virtualintfun(); }; classDERIVED:publicBASE { //…… intfun(); }; BASE*pobj;DERIVEDdobj;pobj=dobj; pobj-fun();//根据pobj当前所指的对象正确调用相应函数第63页,共94页,星期日,2025年,2月5日§8.5虚函数虚函数的含义 1、是一个类的成员函数 2、可以为派生类对象使用 3、派生类可以通过编写自己的成员函数来替 代基类的虚函数,这种替代是基类预见到 的,默认的,甚至是赞成的第64页,共94页,星期日,2025年,2月5日§8.5虚函数虚函数举例学生(Student)本科生(UnderGrad)研究生(PostGrad)硕士研究生(MasterGrad)博士研究生(DoctorGrad)第65页,共94页,星期日,2025年,2月5日§8.5虚函数 classSTUDENT { public: virtualvoidSeleteCourse(); //选课 virtualintCalcuCridit(); //计算总学分 //…… protected: charname[30]; intage; //…… }; 在定义STUDENT类时,已经预见到不同的学生选课的方式是不一样的,计算学分的方法也不一样定义成virtual后,就允许派生类根据自己的需要重新定义成员函数第66页,共94页,星期日,2025年,2月5日§8.5虚函数//UnderGrad本科生类没有重新实现两个虚函数,它是用基类的实现 classUNDERGRAD:publicSTUDENT { public: voidpractice(); //工程实践 private: …… };本科生使用基类的两个虚函数(基类中必须有两个虚函数的实现)第67页,共94页,星期日,2025年,2月5日§8.5虚函数//PostGrad研究生类重新实现两个虚函数 classPOSTGRAD:publicSTUDENT { public: virtualvoidSeleteCourse(); //选课 virtualintCalcuCridit(); //计算总学分 private: intSupervisorID; //导师 //…… };第68页,共94页,星期日,2025年,2月5日§8.5虚函数//MasterGrad硕士生使用PostGrad提供的虚函数 classMASTERGRAD:publicPOSTGRAD { public: //…… }第69页,共94页,星期日,2025年,2月5日§8.4运算符重载运算符重载的含义 对C++预定义的运算符功能的扩展 例: QUEUEq1,q2; q1=q1+q2; MATRI

文档评论(0)

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

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

1亿VIP精品文档

相关文档