收藏 分享(赏)

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

上传人:wspkg9802 文档编号:4740003 上传时间:2019-01-10 格式:PPT 页数:39 大小:635.50KB
下载 相关 举报
C++课件+案例二十五+异质链表问题.ppt_第1页
第1页 / 共39页
C++课件+案例二十五+异质链表问题.ppt_第2页
第2页 / 共39页
C++课件+案例二十五+异质链表问题.ppt_第3页
第3页 / 共39页
C++课件+案例二十五+异质链表问题.ppt_第4页
第4页 / 共39页
C++课件+案例二十五+异质链表问题.ppt_第5页
第5页 / 共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(),在每个派生类中都具有它的重定义版本。在执行时,可根据所插入对象的不同,调用不同的虚函数版本。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营业执照举报