[2018年最新整理]C++程序设计教程12.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  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文档。上传文档
查看更多
[2018年最新整理]C程序设计教程12

C++程序设计教程(第二版) 第十二章 多态 Chapter 12 Polymorphism 第十章内容 1. 继承召唤多态 (Inheritance Summon up Polymorphism) 祖孙互易的说明: 晚辈是前辈的后继,晚辈是前辈的一种. 反之不确,前辈不是晚辈,也不是晚辈的一种. 这一概念也影响到类的继承操作,甚至其指针操作: Student是GraduateStudent的祖先.则: Student s, *pS; GraduateStudent gs, *pGS; s = gs; // ok gs = s; // error pS = static_castStudent*(gs); // ok pGS = static_castGraduateStudent*(s); // error 同化效应 class Student{ public: // . . . void display(){ cout“UnderGraduate\n”; } }; class GraduateStudent :public Student{ public: // . . . void display(){ cout“Graduate\n; } }; Student ds; GraduateStudent gs; ds.display(); gs.display(); 同化效应蔓延到指针操作 Student s, *ps; GraduateStudent gs; ps = s; ps-display(); ps = static_castStudent*(gs); ps-display(); 结果: UnderGraduate Graduate 关键技术 void fn(Student x){ // ... } int main(){ Student s; GraduateStudent gs; fn(s); // 显示大学生信息 fn(gs); // 显示研究生信息 } 结果: UnderGraduate Graduate 2. 抽象编程的困惑 ( Abstract Programming Perplexing ) 类型域方案可以做到,即实现fn函数如下: void fn(Student x){ switch(x.type){ case Student::STUDENT: x.calcTuition(); break; case Student::GRADUATESTUDENT: GraduateStudent rx = static_castGraduateStudent(x); rx.calcTuition(); break; } } 但不敢恭维这种方法,因为它导致类编程与应用编程互相依赖,因而破坏了只关注局部细节的抽象编程. 破坏抽象编程的后果是: 可维护性,可扩展性受到伤害. 若增加一个博士类,则类代码与应用程序代码都得改,而这本来不是应用程序的份内事. 因而呼吁从语言内部来支持这种多态性. 3. 虚函数 ( Virtual Function ) 多态性使得应用程序使用类体系中的祖孙对象共存的复杂局面达到了一种编程自在境界. 程序员从使用孤立的类(抽象数据类型),到使用分层的类,并且让各种对象“同场竞技”,充分展现其个性.尝到了对象化编程的真正乐趣. C++类机制的虚函数就是冲着让类编程实质性地支持应用编程中对家族化对象操作依赖的目的,从而面向对象来分析、设计和解决问题. 4. 避免误用虚函数 ( Avoiding Misusing Virtual Function ) class Base{ public: virtual void fn(int x){ coutBase\n; } }; class Sub : public Base{ public: virtual void fn(double x){ coutSub\n; } }; void test(Base b){ b.fn(3.5); } int main(){ test(Base()); test(Sub()); } 5. 精简共性的类 ( Simplify Class with Generality ) 孤立的类之间有一些共性,希望减少一些冗余代码. 通常不能因此而构成上下级关系的类层次,因为会产生不良反应:基类如果扩展功能,势必连累子类. 6. 多态编程 ( Polymorphic Programming ) 将共性的类通过继承由共性构

文档评论(0)

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

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

1亿VIP精品文档

相关文档