ImageVerifierCode 换一换
格式:PPT , 页数:39 ,大小:635.50KB ,
资源ID:4740003      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4740003.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++课件+案例二十五+异质链表问题.ppt)为本站会员(wspkg9802)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

C++课件+案例二十五+异质链表问题.ppt

1、1页 共39页,案例二十五 异质链表问题,本案例知识要点 链表的使用 类的设计和使用 类的继承 基类、派生类 虚函数,2页 共39页,一、案例需求,案例描述 设计一个异质链表,链表中不同的元素会有不同的数据类型,完成该链表的插入、删除及显示节点信息等操作。 案例效果图 异质链表问题案例效果如图所示。,3页 共39页,异质链表问题案例效果图,4页 共39页,功能说明 定义一个链表,此链表用来存储具有不同数据类型的学生、教师、雇员对象的基本信息。 完成该链表的插入、删除及其显示等操作。,5页 共39页,二、案例分析,根据需求,需要建立3个类,分别是学生类、教师类、雇员类,并对这3个类抽象出一个公共

2、的基类。 抽象出公共的基类的原因如下: 3个类中有许多相同的信息,抽象出公共基类,可以避免重复定义。 要实现异质链表。异质链表是指链表中的节点可以有不同的数据类型。也就是在这个链表中3个类的对象可以共存,节点之间需要指针链接起来,到底是用哪个类的指针无法确定,相互之间独立的类的指针之间是不能随意传递的。因此需要抽象出一个基类,在基类中定义一个基类指针,用来指向下一个对象;此指针可以指向任何一个派生类的对象,因为指向基类的指针可以指向它的派生类。,6页 共39页,向异质链表插入对象需要注意以下几个方面的问题: 异质链表中的各个节点可以存放3个类乃至基类中的任何一个类对象。在链表中插入哪个类的对象

3、,可通过参数来传递。异质链表类中的插入函数传递的参数为Person *node,node为基类指针,它也可以指向派生类对象。在调用此函数时,只需传递一个对象的指针。 在异质链表中各节点元素是按照关键字顺序排列的,按照一个公有的数据成员name 排序,也就是说,用name作为排序关键字key。 向异质链表中插入对象时,由于各节点元素是属于不同类的对象,它们具有不同的数据成员,所占据的存储空间也各不相同,不同对象在链表中插入时需调用不同的方法,因此在基类Person中定义了一个虚函数insert(),在每个派生类中都具有它的重定义版本。在执行时,可根据所插入对象的不同,调用不同的虚函数版本。Ins

4、ert()函数的功能是为基类定义的静态指针分配存储空间,并将本对象赋给它。在插入操作中,只需将此指针插入到链表中即告完成。,7页 共39页,输出异质函数的各个元素时由于输出的内容不同,应有不同的输出函数。定义一个Print()虚函数,在各个派生类中均有它的重定义版本,输出是顺着链表进行的,在每个节点处均用cur-print()来调用输出函数,cur为指向当前对象的指针,依据对象类型的不同,cur-print()可调用print()的不同版本。,8页 共39页,三、案例设计,1类的设计(1)基类Person基类Person的结构如图所示。,9页 共39页,Person类图,10页 共39页, 数

5、据成员char name20;定义姓名。Int age;定义年龄。Char add40;定义地址。Char tele15;定义电话号码。static Person *ptr;定义一个指向此类对象的静态指针。Person *next;指向下一个对象。,11页 共39页, 函数成员Person(char *,int,char *,char *);构造函数。virtual void print();输出基类数据成员。virtual void insert();此函数只定义一个接口。,12页 共39页,(2)派生类Student派生类Student的结构如图所示。,Student类图,13页 共39页

6、, 数据成员friend class List;链表类作为本类友元。int level;定义年级。float grade_point_average;定义平均成绩。,14页 共39页, 函数成员Student(char *,int,char *,char *,int,float);构造函数。void print();重新定义print()函数。void insert();重新定义insert()函数。,15页 共39页,(3)派生类Teacher派生类Teacher的结构如图所示。,Teacher类图,16页 共39页, 数据成员friend class List;链表类作为本类友元。floa

7、t salary;定义工资。 函数成员Teacher(char *,int,char *,char *,float);构造函数。void print();重新定义print()函数。void insert();重新定义insert()函数。,17页 共39页,(4)派生类Staff派生类Staff的结构如图所示。,Staff类图,18页 共39页, 数据成员friend class List;链表类作为本类友元。float hourly_wages;定义计时工资。 函数成员Staff(char *,int,char *,char *,float);构造函数。void print();重新定义p

8、rint()函数。void insert();重新定义insert()函数。,19页 共39页,(5)异质链表类List异质链表类List的结构如图所示。,List类图,20页 共39页, 数据成员Person *root;链表头指针。 函数成员List();构造函数。void insert_Person(Person *node);向链表中插入一个对象。void remove(char *name);从链表中移出一个节点对象。void print_List();输出链表上各节点对象。,21页 共39页,2主程序设计在主函数中声明了一个List类的对象Person,程序结构简单,注释清晰易懂,

9、流程图略。,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(),在每个派生类中都具有它的重定义版本,类似的还有输出节点信息等成员函数的设计。 多态性极大地提高了软件的复用性和可维护性,读者应熟悉并掌握多态性理论和实践,以提高软件设计水平。,39页 共39页,案例提高 本案例只是用于演示多态性,功能性不强。读者可以在本案例的基础上,继续编写一些实用的功能来丰富本案例,并充分体会多态性的优越性。,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报