案例二十五异质链表问题.ppt_第1页
案例二十五异质链表问题.ppt_第2页
案例二十五异质链表问题.ppt_第3页
案例二十五异质链表问题.ppt_第4页
案例二十五异质链表问题.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录退出目录 案例二十五 异质链表问题 本案例知识要点 链表的使用 类的设计和使用 类的继承 基类、派生类 虚函数 1页 共39页 目录退出目录 一、案例需求 案例描述 设计一个异质链表,链表中不同的 元素会有不同的数据类型,完成该 链表的插入、删除及显示节点信息 等操作。 案例效果图 异质链表问题案例效果如图所示。 2页 共39页 目录退出目录 异质链表问题案例效果图 3页 共39页 目录退出目录 功能说明 定义一个链表,此链表用来存储具 有不同数据类型的学生、教师、雇 员对象的基本信息。 完成该链表的插入、删除及其显示 等操作。 4页 共39页 目录退出目录 二、案例分析 根据需求,需要建立3个类,分别是学生类、教师类、雇 员类,并对这3个类抽象出一个公共的基类。 抽象出公共的基类的原因如下: u3个类中有许多相同的信息,抽象出公共基类,可 以避免重复定义。 u要实现异质链表。异质链表是指链表中的节点可以 有不同的数据类型。也就是在这个链表中3个类的对 象可以共存,节点之间需要指针链接起来,到底是 用哪个类的指针无法确定,相互之间独立的类的指 针之间是不能随意传递的。因此需要抽象出一个基 类,在基类中定义一个基类指针,用来指向下一个 对象;此指针可以指向任何一个派生类的对象,因 为指向基类的指针可以指向它的派生类。 5页 共39页 目录退出目录 向异质链表插入对象需要注意以下几个方面的问题: 异质链表中的各个节点可以存放3个类乃至基类中的任何一个 类对象。在链表中插入哪个类的对象,可通过参数来传递。异 质链表类中的插入函数传递的参数为Person *node,node为基类 指针,它也可以指向派生类对象。在调用此函数时,只需传递 一个对象的指针。 在异质链表中各节点元素是按照关键字顺序排列的,按照一个 公有的数据成员name 排序,也就是说,用name作为排序关键 字key。 向异质链表中插入对象时,由于各节点元素是属于不同类的对 象,它们具有不同的数据成员,所占据的存储空间也各不相同 ,不同对象在链表中插入时需调用不同的方法,因此在基类 Person中定义了一个虚函数insert(),在每个派生类中都具有它 的重定义版本。在执行时,可根据所插入对象的不同,调用不 同的虚函数版本。Insert()函数的功能是为基类定义的静态指针 分配存储空间,并将本对象赋给它。在插入操作中,只需将此 指针插入到链表中即告完成。 6页 共39页 目录退出目录 输出异质函数的各个元素时由于输出的内 容不同,应有不同的输出函数。定义一个 Print()虚函数,在各个派生类中均有它的重 定义版本,输出是顺着链表进行的,在每 个节点处均用cur-print()来调用输出函数, cur为指向当前对象的指针,依据对象类型 的不同,cur-print()可调用print()的不同版 本。 7页 共39页 目录退出目录 三、案例设计 1类的设计 (1)基类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(); 此函数只定义一个接口。 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)派生类Teacher 派生类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; 链表类作为本类友元。 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 *name); 从链表中移出一个节点对象。 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页 共39页 目录退出目录 35页 共39页 目录退出目录 36页 共39页 目录退出目录 37页 共39页 目录退出目录 五、案例总结与提高 案例总结 本案例设计的异质链表充分体现了面向对象系 统的多态性,是学习多态性很好的例子。读者 要注意在向异质链表中插入对象时,由于各节 点元素是属于不同类的对象,它们具有不同的 数据成员,因此在插入时需调用不同的方法, 所以在基类Person中定义了一个虚函数insert() ,在每个派生类中都具有它的重定义版本,类 似的还有输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论