案例二十五 异质链表问题

上传人:飞*** 文档编号:52322880 上传时间:2018-08-20 格式:PPT 页数:39 大小:660.50KB
返回 下载 相关 举报
案例二十五  异质链表问题_第1页
第1页 / 共39页
案例二十五  异质链表问题_第2页
第2页 / 共39页
案例二十五  异质链表问题_第3页
第3页 / 共39页
案例二十五  异质链表问题_第4页
第4页 / 共39页
案例二十五  异质链表问题_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《案例二十五 异质链表问题》由会员分享,可在线阅读,更多相关《案例二十五 异质链表问题(39页珍藏版)》请在金锄头文库上搜索。

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

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

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

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

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

6、个接口。11页 共39页目录退出目录(2)派生类Student派生类Student的结构如图所示。Student类图 12页 共39页目录退出目录 数据成员friend class List;链表类作为本类友元。int level;定义年级。float grade_point_average;定义平均成绩。13页 共39页目录退出目录 函数成员Student(char *,int,char *,char *,int,float);构造函数。void print();重新定义print()函数。void insert();重新定义insert()函数。14页 共39页目录退出目录(3)派生类Te

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

8、float hourly_wages;定义计时工资。 函数成员Staff(char *,int,char *,char *,float);构造函数。void print();重新定义print()函数。void insert();重新定义insert()函数。18页 共39页目录退出目录(5)异质链表类List异质链表类List的结构如图所示。List类图 19页 共39页目录退出目录 数据成员Person *root;链表头指针。 函数成员List();构造函数。void insert_Person(Person *node);向链表中插入一个对象。void remove(char *nam

9、e);从链表中移出一个节点对象。void print_List();输出链表上各节点对象。20页 共39页目录退出目录2主程序设计在主函数中声明了一个List类的对象Person,程序结构简单,注释清晰易懂,流程图略。21页 共39页目录退出目录四、案例实现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页

10、 共39页目录退出目录35页 共39页目录退出目录36页 共39页目录退出目录37页 共39页目录退出目录五、案例总结与提高案例总结 本案例设计的异质链表充分体现了面向对象系 统的多态性,是学习多态性很好的例子。读者 要注意在向异质链表中插入对象时,由于各节 点元素是属于不同类的对象,它们具有不同的 数据成员,因此在插入时需调用不同的方法, 所以在基类Person中定义了一个虚函数insert() ,在每个派生类中都具有它的重定义版本,类 似的还有输出节点信息等成员函数的设计。 多态性极大地提高了软件的复用性和可维护性 ,读者应熟悉并掌握多态性理论和实践,以提 高软件设计水平。38页 共39页目录退出目录案例提高 本案例只是用于演示多态性,功能 性不强。读者可以在本案例的基础 上,继续编写一些实用的功能来丰 富本案例,并充分体会多态性的优 越性。39页 共39页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号