




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1页共39页 案例二十五异质链表问题 本案例知识要点链表的使用类的设计和使用类的继承基类 派生类虚函数 2页共39页 一 案例需求 案例描述设计一个异质链表 链表中不同的元素会有不同的数据类型 完成该链表的插入 删除及显示节点信息等操作 案例效果图异质链表问题案例效果如图所示 3页共39页 异质链表问题案例效果图 4页共39页 功能说明定义一个链表 此链表用来存储具有不同数据类型的学生 教师 雇员对象的基本信息 完成该链表的插入 删除及其显示等操作 5页共39页 二 案例分析 根据需求 需要建立3个类 分别是学生类 教师类 雇员类 并对这3个类抽象出一个公共的基类 抽象出公共的基类的原因如下 3个类中有许多相同的信息 抽象出公共基类 可以避免重复定义 要实现异质链表 异质链表是指链表中的节点可以有不同的数据类型 也就是在这个链表中3个类的对象可以共存 节点之间需要指针链接起来 到底是用哪个类的指针无法确定 相互之间独立的类的指针之间是不能随意传递的 因此需要抽象出一个基类 在基类中定义一个基类指针 用来指向下一个对象 此指针可以指向任何一个派生类的对象 因为指向基类的指针可以指向它的派生类 6页共39页 向异质链表插入对象需要注意以下几个方面的问题 异质链表中的各个节点可以存放3个类乃至基类中的任何一个类对象 在链表中插入哪个类的对象 可通过参数来传递 异质链表类中的插入函数传递的参数为Person node node为基类指针 它也可以指向派生类对象 在调用此函数时 只需传递一个对象的指针 在异质链表中各节点元素是按照关键字顺序排列的 按照一个公有的数据成员name排序 也就是说 用name作为排序关键字key 向异质链表中插入对象时 由于各节点元素是属于不同类的对象 它们具有不同的数据成员 所占据的存储空间也各不相同 不同对象在链表中插入时需调用不同的方法 因此在基类Person中定义了一个虚函数insert 在每个派生类中都具有它的重定义版本 在执行时 可根据所插入对象的不同 调用不同的虚函数版本 Insert 函数的功能是为基类定义的静态指针分配存储空间 并将本对象赋给它 在插入操作中 只需将此指针插入到链表中即告完成 7页共39页 输出异质函数的各个元素时由于输出的内容不同 应有不同的输出函数 定义一个Print 虚函数 在各个派生类中均有它的重定义版本 输出是顺着链表进行的 在每个节点处均用cur print 来调用输出函数 cur为指向当前对象的指针 依据对象类型的不同 cur print 可调用print 的不同版本 8页共39页 三 案例设计 1 类的设计 1 基类Person基类Person的结构如图所示 9页共39页 Person类图 10页共39页 数据成员charname 20 定义姓名 Intage 定义年龄 Charadd 40 定义地址 Chartele 15 定义电话号码 staticPerson ptr 定义一个指向此类对象的静态指针 Person next 指向下一个对象 11页共39页 函数成员Person char int char char 构造函数 virtualvoidprint 输出基类数据成员 virtualvoidinsert 此函数只定义一个接口 12页共39页 2 派生类Student派生类Student的结构如图所示 Student类图 13页共39页 数据成员friendclassList 链表类作为本类友元 intlevel 定义年级 floatgrade point average 定义平均成绩 14页共39页 函数成员Student char int char char int float 构造函数 voidprint 重新定义print 函数 voidinsert 重新定义insert 函数 15页共39页 3 派生类Teacher派生类Teacher的结构如图所示 Teacher类图 16页共39页 数据成员friendclassList 链表类作为本类友元 floatsalary 定义工资 函数成员Teacher char int char char float 构造函数 voidprint 重新定义print 函数 voidinsert 重新定义insert 函数 17页共39页 4 派生类Staff派生类Staff的结构如图所示 Staff类图 18页共39页 数据成员friendclassList 链表类作为本类友元 floathourly wages 定义计时工资 函数成员Staff char int char char float 构造函数 voidprint 重新定义print 函数 voidinsert 重新定义insert 函数 19页共39页 5 异质链表类List异质链表类List的结构如图所示 List类图 20页共39页 数据成员Person root 链表头指针 函数成员List 构造函数 voidinsert Person Person node 向链表中插入一个对象 voidremove char name 从链表中移出一个节点对象 voidprint List 输出链表上各节点对象 21页共39页 2 主程序设计在主函数中声明了一个List类的对象Person 程序结构简单 注释清晰易懂 流程图略 22页共39页 四 案例实现 23页共39页 24页共39页 25页共39页 26页共39页 27页共39页 28页共39页 29页共39页 30页共39页 31页共39页 32页共39页 33页共39页 34页共39页 35页共39页 36页共39页 37页共39页 38页共39页 五 案例总结与提高 案例总结本案例设计的异质链表充分体现了面向对象系统的多态性 是学习多态性很好的例子 读者要注意在向异质链表中插入对象时 由于各节点元素是属于不同类的对象 它们具有不同的数据成员 因此在插入时需调用不同的方法 所以在基类Person中定义了一个虚函数insert 在每个派生类中都具有它的重定义版本 类似的还有输出节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特种设备安全管理人员考试安全检查与监督案例分析实战模拟试卷
- 2025年全国计算机技术与软件专业技术资格(水平)考试软件运维经理试卷
- 全国统一必修课数学试卷
- 纪伯伦生平简介
- 2024年南岗区哈西社区卫生服务中心招聘真题
- 七年级孟建平数学试卷
- 马鞍山市消防救援局招聘政府专职消防员考试真题2024
- 七上二单元数学试卷
- 2024年海南省老年病医院招聘笔试真题
- 宁波9校联考数学试卷
- 政府招商投资合作框架协议书模板6篇
- python少儿编程课程-第3课:数据类型
- 《睡眠呼吸暂停低通气综合征与高血压》课件
- 教学课件-国际贸易实务(第三版)傅龙海
- 2025年房东租房合同模板电子版
- 《颅脑与腹部损伤》课件
- 2025年企业劳动者雇佣合同样本
- 安徽省高一英语必修一单词表
- 企业级实验设备的投资回报分析方法
- DB37T 5133-2019 预制双面叠合混凝土剪力墙结构技术规程
- 老年上消化道出血急诊诊疗专家共识(2024版)解读
评论
0/150
提交评论