- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C程序设计华南理工大学第11章多态性和虚函数的应用与讨论2
第十一章 多态性和虚函数(2)应用与讨论 面向对象程序设计(C++) 11.8 构造抽象接口 11.8.1 问题描述 11.8.2 静态绑定下的实现 传达员只负责通知某时某地开会,至于开什么会,怎么开,他才不管呢。 然而实现时,程序员必须分清楚通知的对象是谁?然后决定应该调用那一个对象的“开会函数”。 11.8.3 动态绑定下的实现 11.8.3 动态绑定下的实现(续) 11.9 提高模块的独立性 多态性的优点之二:可扩展性好 11.9.1 静态绑定下的扩充 11.9.2 动态绑定下的扩充 现在要增加类Line,只需要: 从基类Shape中派生出Line类; 无需设置类型域,无需改变其它任何的代码! 习题 (30分钟内完成) 信息学院教学办随机抽取100名学院的学生到中国科学院实习,他们来自不同的系:CS、Auto、和EE;但教学办并不知道他们应该到那个所实习。事实上,计算机系的学生知道自己应该到软件所实习,自动化系到自动化所,电子工程系到电子所。假设每个学生在实习时首先要进行自我介绍。请编程模拟上述过程。 具体要求为: 1. 设计学生类,信息包含姓名(8字节字符)、学号(8字节字符)、自我介绍(动态申请内存空间);学生的学号在对象生成时由程序统一设定,要求学号不重复; 2. 可以以下列方式产生学生对象: Cstudent stu1(“Mike”); // 仅设定姓名; Cstudent stu2(“Rick”, “I am rick , from USTC” ); // 仅设定姓名和自我介绍。 Cstudent stu3(stu2); // 从一个对象初始化另一个对象,表示的是两个学生同 // 名,自我介绍内容也相同。 3. 允许两个学生对象之间的赋值操作。如:stu1=stu2; 仅表示用stu2的自我介绍 内容设置stu1的自我介绍; 4. 成员函数setmessage(char * )设置自我介绍内容; getmessage()获取自我介 绍内容;pratice()表示实习过程。 11.10 防止组合爆炸 11.10.1 引言:表达式求值 类的层次图 11.10.2 讨论:静态绑定的表达式求值 求某个结点的值时,由于向上类型转换,结点的类型都变成Node *,因此,必须依赖switch逻辑判断左子树和右子树结点的类型,才能正确地绑定到左右子结点的求值函数,最后得到根结点的值。 11.10.3 动态绑定的表达式求值 1. 设计结点的类层次 2. 实现各个结点类及主函数 派生类定义: 派生类定义(续): 3. 扩充:支持 – (减运算)、/ (除运算) 11.10.4 讨论:交互式表达式计算 需要编译器的lex和yacc支持:根据用户输入的表达式动态产生表达式树。 具体实现(略):参见《编译原理》词法分析和语法分析相关章节。 11.10.5 讨论:如何支持混合运算 假设结点中可能有复数,并且允许复数和整数的混合运算,该如何处理? 例如:np1+np2有四种可能: 1):复数 + 复数 2):整数 + 复数 3):复数 + 整数 4):整数 + 整数 11.11 虚运算符重载函数注 多重指派技术:虚函数与运算符重载函数的完美结合! 11.11.1 问题:混合运算 思路一:虚函数 分析:虚函数的本质是能够动态确定一个对象的类型,而由于 m1*m2?m1.operator*(m2)中存在两个未确定的类型。因此,试图依赖一次虚函数调用无法同时动态确定m1和m2的类型; 思路二:重载“+” 分析:由于重载函数是必须依赖参数来决定确定具体调用的版本。而 m1*m2(? m1.operator*(m2))中,m1可以通过虚函数动态绑定,但m2的类型尚未确定。因此单纯依赖重载函数不能解决。 思路三:两者结合(多重指派技术) (不妨设为 Matrix * Vector) 11.11.2 多重指派:程序的实现(demo) 小结 作业: class Node{ // 基类,结点类 public: Node(){}; virtual ~Node(){ }; vi
您可能关注的文档
- 2016高考生物二轮专题复习课件:专题四遗传、变异和进化第3讲变异、育种和进化.ppt
- 2016高考生物二轮复习专题四遗传、变异和进化第3讲变异、育种和进化课件.ppt
- 2016高考生物二轮专题复习课件专题四遗传、变异和进化第3讲变异、育种和进化.ppt
- 2017届高考化学一轮复习课件:第11课时《无机非金属材料的主角——碳和硅》3年高考2年模拟.ppt
- 2017届高三生物第一轮复习生物的进化.ppt
- 2017中考化学信息迁移题专题8.ppt
- 2017版《188套重组优化卷》高考生物总复习——单元四遗传的基本规律和伴性遗传.doc
- 2017210H7N9诊疗方案2017版讲解.ppt
- 2017春高中生物专题5DNA和蛋白质技术课题3血红蛋白的提取和分离课件.ppt
- 2016高考生物二轮专12细胞的结构基础含物质出入细胞的方式.ppt
- 2025年成都市玩偶生产荧光涂鸦互动玩偶开发可行性研究报告.docx
- 2025年成都市海绵生产用于体育馆室外运动场地透水改造可行性研究报告.docx
- 2025年天津市体操鞋企业团建运动应用报告.docx
- 2025年上海市溶洞极限运动(速降)场地开发可行性研究报告.docx
- 2025年上海市涵洞工程施工技术应用可行性研究报告.docx
- 2025年上海市体育场馆设施扎带安全防护可行性研究报告.docx
- 2025年上海市牦牛育肥产业园区建设可行性研究报告.docx
- 2025年旅拍宠物陪伴拍摄项目可行性研究报告.docx
- 2025年上海市进口食品节庆主题快闪店可行性研究报告.docx
- 2025年上海市洗选厂尾矿综合利用产业化可行性研究报告.docx
文档评论(0)