



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档数据结构学习(C+)如何在一个链表中链入不同类型的对象 happycock(原作)转自CSDN 似乎你也注意到了,不管怎么定义,好像一个链表中的对象都是同一类型的。而实际上,这也是必须的,否则,返回节点中的数据这样的函数的返回值的类型是什么呢?但是,人的要求是无止境的(省略本人感慨若干百字)。把不同的对象链在一个链表中的目的是为了方便使用,现在一定记住这个原则,后面的讨论都是基于这个原则的,否则,我们就是技术狂人了偏偏实现一些看起来不可能的事情。达到这个目标的原理其实很简单,只要把不同类型的对象变成同样的类型就可以了。看下面的结构定义:struct Mobjectvoid *p;int ObjectType;将一个对象链入链表时,将指向这个对象的指针赋给p,同时记录对象类型。当取得这个节点的时候,根据ObjectType的值来确定p指的对象类型,从而还原指针类型,也就得到了原来的对象。后面讲到的广义表实际上采用的就是这种方法。显而易见的,这样的Mobject支持的对象是预先确定的,你将自己维护ObjectType列表,每添加一种类型的支持,你需要在ObjectType列表中给出它的替代值,然后在相应的switch(ObjectType)给出这种类型的case语句。很烦人是吧,下面给出另一种方法,其实还是这个原理,不同的是,把这个烦人的工作交给编译器了。还记得前边强调的原则吗,为什么我们将不同类型的对象放在一个链表中呢?很显然,我们想达到这样的一个效果:比如说,我们在一个链表中储存了三角形,直线,圆等图形的参数,我们希望对某个节点使用Draw()方法,就重绘这个图形;使用Get()则得到这个图形的各个参数;使用Put()则修改图形的参数。可以看出,这些不同的对象实际上有同样的行为,只是实现的方法不同。C+的多态性正好可以实现我们的构想。关于这方面,请参阅相关的C+书籍(我看的是C+编程思想)。请看如下的例子:#ifndef Shape_H#define Shape_Hclass Shape public:virtual void Input() = 0;virtual void Print() = 0;Shape();virtual Shape();#endif【说明】定义一个抽象基类,有两个行为,Input()为输入图形参数,Print()为打印图形参数。图省事,只是简单的说明问题而已。#ifndef Point_H#define Point_Hclass 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.hclass 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.hclass Line : public Shape public:void Input()cout endl 输入直线的参数;cout endl 输入端点1的坐标: endl; point1.Put();cout endl 输入端点2的坐标: endl;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学高分子新材料生产线项目可行性研究报告(范文)
- 读书笔记:小王子中的友情与成长15篇范文
- 建筑装饰材料与施工技术试题库
- 智能化监控系统在项目管理中的应用
- 网络安全与防护知识梳理
- 食品营养学及食品安全管理题库
- 我家的冰箱作文范文13篇
- 中医药适宜技术的国际化发展与文化传播策略
- 复合型光伏电站配套储能系统项目可行性研究报告
- 2025年心理测量与评估考试试题及答案
- 台球助教培训流程
- 商业空间中的植物布置与养护
- 公司煤矿兼职矿山救护队制度及职责
- 《休克新进展》课件
- 旅游景区消防维保方案及管理
- 高端仿真花采购合同
- 室内装修拆除施工方案
- 内科学 消化系统疾病 习题集 带答案
- 研究生学术表达能力培养智慧树知到答案2024年西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部
- 安踏组织架构分析文档
- 护理病历质控
评论
0/150
提交评论