案例二十五异质链表问题.ppt

上传人:小飞机 文档编号:6365656 上传时间:2023-10-21 格式:PPT 页数:39 大小:632.50KB
返回 下载 相关 举报
案例二十五异质链表问题.ppt_第1页
第1页 / 共39页
案例二十五异质链表问题.ppt_第2页
第2页 / 共39页
案例二十五异质链表问题.ppt_第3页
第3页 / 共39页
案例二十五异质链表问题.ppt_第4页
第4页 / 共39页
案例二十五异质链表问题.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《案例二十五异质链表问题.ppt》由会员分享,可在线阅读,更多相关《案例二十五异质链表问题.ppt(39页珍藏版)》请在三一办公上搜索。

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(),在每个派生类中都具有它的重定义版本。在执行时,可根据所插入对象的不同,调用不同的虚函数版本。Insert()函数的功能是为基类定义的

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

5、义姓名。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页,数据成员 friend class L

6、ist;链表类作为本类友元。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;链表类作为本类友元。float salary;定义工资。函数成员 Tea

7、cher(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();重新定义print()函数。void insert();重新定义

8、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,程序结构简单,注释清晰易 懂,流程图略。,22页 共39页,四、案例实现,23页

9、共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页,案例提高本案例只是用于演示多态性,功能性不强。读者可以在本案例的基础上,继续编写一些实用的功能来丰富本案例,并充分体会多态性的优越性。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号