网站大量收购独家精品文档,联系QQ:2885784924

案例25异质链表问题.pptVIP

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
案例25异质链表问题

案例二十五 异质链表问题 本案例知识要点 链表的使用 类的设计和使用 类的继承 基类、派生类 虚函数 一、案例需求 案例描述 设计一个异质链表,链表中不同的元素会有不同的数据类型,完成该链表的插入、删除及显示节点信息等操作。 案例效果图 异质链表问题案例效果如图所示。 异质链表问题案例效果图 功能说明 定义一个链表,此链表用来存储具有不同数据类型的学生、教师、雇员对象的基本信息。 完成该链表的插入、删除及其显示等操作。 二、案例分析 根据需求,需要建立3个类,分别是学生类、教师类、雇员类,并对这3个类抽象出一个公共的基类。 抽象出公共的基类的原因如下: 3个类中有许多相同的信息,抽象出公共基类,可以避免重复定义。 要实现异质链表。异质链表是指链表中的节点可以有不同的数据类型。也就是在这个链表中3个类的对象可以共存,节点之间需要指针链接起来,到底是用哪个类的指针无法确定,相互之间独立的类的指针之间是不能随意传递的。因此需要抽象出一个基类,在基类中定义一个基类指针,用来指向下一个对象;此指针可以指向任何一个派生类的对象,因为指向基类的指针可以指向它的派生类。 向异质链表插入对象需要注意以下几个方面的问题: 异质链表中的各个节点可以存放3个类乃至基类中的任何一个类对象。在链表中插入哪个类的对象,可通过参数来传递。异质链表类中的插入函数传递的参数为Person *node,node为基类指针,它也可以指向派生类对象。在调用此函数时,只需传递一个对象的指针。 在异质链表中各节点元素是按照关键字顺序排列的,按照一个公有的数据成员name 排序,也就是说,用name作为排序关键字key。 向异质链表中插入对象时,由于各节点元素是属于不同类的对象,它们具有不同的数据成员,所占据的存储空间也各不相同,不同对象在链表中插入时需调用不同的方法,因此在基类Person中定义了一个虚函数insert(),在每个派生类中都具有它的重定义版本。在执行时,可根据所插入对象的不同,调用不同的虚函数版本。Insert()函数的功能是为基类定义的静态指针分配存储空间,并将本对象赋给它。在插入操作中,只需将此指针插入到链表中即告完成。 输出异质函数的各个元素时由于输出的内容不同,应有不同的输出函数。定义一个Print()虚函数,在各个派生类中均有它的重定义版本,输出是顺着链表进行的,在每个节点处均用cur-print()来调用输出函数,cur为指向当前对象的指针,依据对象类型的不同,cur-print()可调用print()的不同版本。 三、案例设计 1.类的设计 (1)基类Person 基类Person的结构如图所示。 Person类图 ① 数据成员 char name[20]; 定义姓名。 Int age; 定义年龄。 Char add[40]; 定义地址。 Char tele[15]; 定义电话号码。 static Person *ptr; 定义一个指向此类对象的静态指针。 Person *next; 指向下一个对象。 ② 函数成员 Person(char *,int,char *,char *); 构造函数。 virtual void print(); 输出基类数据成员。 virtual void insert(){}; 此函数只定义一个接口。 (2)派生类Student 派生类Student的结构如图所示。 ① 数据成员 friend class List; 链表类作为本类友元。 int level; 定义年级。 float grade_point_average; 定义平均成绩。 ② 函数成员 Student(char *,int,char *,char *,int,float); 构造函数。 void print(); 重新定义print()函数。 void insert(); 重新定义insert()函数。 (3)派生类Teacher 派生类Teacher的结构如图所示。 ① 数据成员 friend class List; 链表类作为本类友元。 float salary; 定义工资。 ② 函数成员 Teacher(char *,int,char *,char *,float); 构造函数。 void print(); 重新

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档