



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构学习 数据结构学习 C C 如何在一个链表中链入不同如何在一个链表中链入不同 类型的对象类型的对象 happycock 原作 转自 CSDN 似乎你也注意到了 不管怎么定义 好像一个链表中的对象都是同一类型的 而实际 上 这也是必须的 否则 返回节点中的数据这样的函数的返回值的类型是什么呢 但是 人的要求是无止境的 省略本人感慨若干百字 把不同的对象链在一个链表中的目的 是为了方便使用 现在一定记住这个原则 后面的讨论都是基于这个原则的 否则 我们 就是技术狂人了 偏偏实现一些看起来不可能的事情 达到这个目标的原理其实很简单 只要把不同类型的对象变成同样的类型就可以了 看下面的结构定义 struct Mobject void p int ObjectType 将一个对象链入链表时 将指向这个对象的指针赋给 p 同时记录对象类型 当取得 这个节点的时候 根据 ObjectType 的值来确定 p 指的对象类型 从而还原指针类型 也 就得到了原来的对象 后面讲到的广义表实际上采用的就是这种方法 显而易见的 这样的 Mobject 支持的 对象是预先确定的 你将自己维护 ObjectType 列表 每添加一种类型的支持 你需要在 ObjectType 列表中给出它的替代值 然后在相应的 switch ObjectType 给出这种类型的 case 语句 很烦人是吧 下面给出另一种方法 其实还是这个原理 不同的是 把这个烦 人的工作交给编译器了 还记得前边强调的原则吗 为什么我们将不同类型的对象放在一个链表中呢 很显然 我们想达到这样的一个效果 比如说 我们在一个链表中储存了三角形 直线 圆等图形 的参数 我们希望对某个节点使用 Draw 方法 就重绘这个图形 使用 Get 则得到这个 图形的各个参数 使用 Put 则修改图形的参数 可以看出 这些不同的对象实际上有同样 的行为 只是实现的方法不同 C 的多态性正好可以实现我们的构想 关于这方面 请参阅相关的 C 书籍 我看 的是 C 编程思想 请看如下的例子 ifndef Shape H define Shape H class Shape public virtual void Input 0 virtual void Print 0 Shape virtual Shape endif 说明 定义一个抽象基类 有两个行为 Input 为输入图形参数 Print 为打印图形参 数 图省事 只是简单的说明问题而已 ifndef Point H define Point H class Point public void Put cout x cout y void Get cout endl x 坐标为 x cout endl y 坐标为 y virtual Point private int x int y endif 说明 点的类定义与实现 ifndef Circle H define Circle H include Shape h include Point h class Circle public Shape public void Input cout endl 输入圆的参数 cout endl 输入圆心点的坐标 endl center Put cout endl radius void Print cout endl 圆的参数为 cout endl 圆心点的坐标 endl center Get cout endl 半径 radius virtual Circle private int radius Point center endif 说明 圆的类定义与实现 继承 Shape 类的行为 ifndef Line H define Line H include Shape h include Point h class Line public Shape public void Input cout endl 输入直线的参数 cout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中央一号文件自测50题【答案+解析】
- 出纳安全培训内容课件
- 衡水金卷四省(四川云南)高三联考9月联考政治(含答案)
- 涉密信息系统集成资质保密知识测试题库题库(含答案)
- 2025年面条买卖合同
- 道教入学考试面试问题及答案
- 思瑞浦招聘笔试题库2025
- 2025年农村私人房屋买卖合同范本
- 2025合同范本:计算机硬件采购合同样本
- 2025年上海房屋租赁合同范本版
- 楼盘销售技巧培训课件
- 总装工艺基础知识培训课件
- 2025年血透室透析液污染应急预案演练脚本
- 医院空气净化管理标准解析
- 风机噪声控制材料研究及使用方法
- 吴伯萧名篇阅读理解与教学设计
- 曲臂式高空作业车专项施工方案
- 各阶段样件管理办法
- 2025年服务行业技能考试-电教员历年参考题库含答案解析(5套100道单选题合辑)
- 高职院校实训室管理办法
- 电力施工安全管理办法
评论
0/150
提交评论