说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

vector&父类子类的问题

编辑:说三道四文库 发布时间:2017-11-21 03:12
HTML文档下载 WORD文档下载 PDF文档下载
我在使用vector来存放类的实例后,在方法中调用的时候,出错,请各位大虾,帮帮忙


定义:
std::vector<Record> data;

//其中Record是我自己定义的类,它本身是一个父类,他还有几个子类,如FillRecord

现在我定义一个方法
int compileFillRecord( FillRecord record )

调用的时候,出了问题

int i = compileFillRecord( data.at(0) );
//此处的data就是上面定义的vector,data中存放的就是Record的子类FillRecord,难道
我这样调用不行吗,问题出在哪里??
还是因为data.at()返回的是一个引用,是我调用的方法不对吗??

急!!请帮助!!thanks
向下影射需要用强转型
int i = compileFillRecord( static_cast<FillRecord>(data.at(0)) );
对象类型是不参相互转换的(除非定义了相应的类型转换操作符或是copy constructor),只在对象指针或对象引用类型才可以自动“向上映射”。而向下映射则必须用强制类型转换。

你这里范了几个错误:
1:不能用vector<Record>去存放Record的衍生类对象,即使存进去了,也会变成了Record对象而不再是原来的类型了(vector中存储的都是调用Record的构造函数生成的对象,只能是Record)。如果你想要让它可以存储衍生类的对象,应该让它存储指针类型(用vector<Record*>,更好的方法是使用vector<boost::shared_ptr<Record>>)。

2:不能把一个对象传给要求其基类对象作为参数的对象(连类型转换都不能用),如果要这样做还是必须使用指针或引用,还要做类型转换。也可以在调用函数时转换:
 
FillRecord *temp = dynamic_cast<FillRecord*>(data.at(0));//假设你用的是vector<Record*>
if (FillRecord != NULL)
  complileFillRecord(*temp);

如果你可以确定data.at(0)一定是个FillRecord并且Record是FillRecord的第一个公共非虚基类,也可以用static_cast转换以提高效率。
在vector中保存指针,然后将record中加入虚拟函数。
换成
std::vector<Record&> data;
或者
std::vector<Record*> data;
由于vector的元素为record的类型,所以添加record派生类型对象时会发生对象切片现象。
同时,在函数调用过程中,需要fillrecord类型对象,而vector中对象的实际类型均不适该类型,也不能转化为该类型(超类对象不能转化为子类对象)。
另外就是频繁的拷贝复制对象会降低系统效率,建议采用wenddydd的方法。
More Effictive C++ Item 3
轻松完成网站提速:来自Google、淘宝等的Nginx PageSpeed模块 Touch-Pay发布 移动联通在手机游戏领域联合推融合计费SDK 如何组织大型JavaScript应用中的代码? Robert Scoble:戴Google Glass两周后 再也不想摘下它 赶时髦?Facebook CEO 2013年将领取1美元年薪 蓝港在线CEO王峰:我在网络游戏行业十年从业记 CMDN Club 27期:从儿童音乐教育到移动碎片化管理 聚焦全球移动市场——你所不知道的俄罗斯 MemSQL:号称世界上最快的内存-关系型数据库 兼容MySQL但快30倍 PC衰落 Intel转投Google挖掘移动市场潜力 移动周报:500元体感、精确到0.01毫米的Leap Motion TUP第29期:王淮、龚世海谈如何打造优秀的技术团队 一网打尽13款开源Java大数据工具,从理论到实践的剖析 从用户体验的善与恶说起,做用户爱“玩”的教育应用 三大主流开源硬件对比:Arduino vs BeagleBone vs Raspberry Pi “BlackBerry 10移动应用开发大赛”应用推荐 Java程序优化的一些最佳实践 Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具 Anchora鲁为民:PaaS是我的兴趣 次世代IDE Light Table 0.4发布 带来众多更新和改进 别再设计易碎的Web API! LinkedIn:55人支持2700位员工,2亿用户的大数据分析 Brian Krzanich是谁?这位新CEO预示英特尔未来怎样? HTML5开发者心声:浏览器兼容性成最大问题 传微软6月下旬将发布第二代Surface 7到9英寸全有 Turbulenz:HTML5 2D和3D游戏引擎开源 携程开放平台总经理夏天:内容+高转化率成就开发者 直接拿来用!最火的Android开源项目(一) Qunar 谌振宇:旅游行业的移动化如何布局? 大数据分析“铁三角”: Teradata数据仓库、Teradata Aster与Hadoop Teradata专业服务:打造行业企业的“数据科学家” 在客户端打开服务器上的Word,PDF等文件时能否限制客户端COPY,另存等功能 分 多了该怎么办呢?:-) DataGrid及水晶报表问题!请高手指点!! 成功安装了oracle8.17,接下来我该怎么配置呢? .net frameword 1.1 C#语言有什么变化? 如何运行一句动态组装的sql语句?? 怪问题!高分求助!!! "面试试题"急求解答。急!!!!!!急!!!! 个人所得税计税基数由原来的800元,修改现计税基数1200元,请修改? 关于权限 javascript中怎样去掉字符串中的空格 求购基于Html的全文检索(用于光盘发布的)相关技术(控件和接口资料) 大家碰到这种问题是怎么解决的??? 如何令窗体只加载一次!Dim aa As New Form2 aa.Show() 关于下载的问题!!!!!!!!非常急!!!!!!!!!!! DB2不能一次插入多条记录么?? 能将数字记钱方式转换为大写的方式? 我没有分了,可是我还有个问题 请问也SQL2000数据库Windows身份验证,SQL Server身份验证的问题?? 关于层的问题! delphi 高难度!有没有人搞得出! 讨论:CSDN该不该分两个区?(入门级与专业级) 各大版主请进 简单问题,在线等待,解决就结稿. 用DES算法算出的注册码怎么是乱字符? <<LINUX与UNIX_SHELL编程指南>>中不懂的问题 分 多了该怎么办呢?:-) 请问怎么读取.txt文件的第n行? 如何将一个象素点设置成某一种颜色(即绘制一个象素点). 如何使一中文网站系统,转成English版的系统呢? 将dbf文件中的一部分字段数据导入到db的一张表中[斑主帮忙] 在线游戏刷新问题,高手接招 关于关闭窗口的超级难题 请各位推荐一下用.net开发的OA产品或者公司 VB.NET问题 框架里如何得到地址栏上的地址?? KEIL C51的中断服务程序如何通过串口返回应答信息? OA中关于流程动态设定的设计问题,谢谢 那里有DB2下载啊? 菜鸟提问:为什么toolbar控件加到窗体上时,大小不能改变?我怎么设置宽和高都是原来样子的 最简单的一个问题 小程序,愿交流 小程序,愿交流 如何用api函数实现服务器和客户端的字符串传输?(讨论和将帖子提前的都有分拿) 如何绕过代理服务器? 急:打开记录集显示 :Timeout expired 那里有Informix下载啊? mouseDown方法为何不能重写? 矢量绘图中如何实现在视窗中输入这样的文本? (来者的分)我要做一个短消息系统应用于办公系统中,请问买一块手机好还是手机模块? 请各位大虾指点哪里有较好的asp教程下载? 利用com实现进程之间数据通信,给出例子或者讲解文章即可 里天都市的原型是哪座城市? 春秋战国时晋国的军队是国君领导的还是六卿的私兵组成的2种情况都不合理啊:1、国君领导的军队,那么国君就不会被卿大夫架空;2、如果是卿大夫的私兵组成的晋国军队,那么担任中军将 有摸,和象的成语 BI和BO是什么关系呢 怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?(400字左右) 怎样理解十二五规划纲要关于经济增长预期目标年均增长 怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?至少600字,麻烦大家了,最晚在下周一就要很急的…… 怎么样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?六百字左右 急求一篇400字左右的论述题,怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?RT 带有“排”(只要是同音的排字都可以)成语带有“排”(只要是同音的排字都可以)的成语 求带有‘’排‘字的成语或四字词语,与排同音的也可以 宗庆后语出惊人:中国不能再造房子了金正恩出席“2万连长”大会并讲话【高“土豪”纯金奥特曼来啦! 售价超千万美国男子为防妻分家产 将值50万美元国防部:无人机若被击落必反击聚焦去美国化:是否为世界多极化发展必第二届世界浙商大会昨在杭开幕 现场签教授称“黄金大米”尚处于实验室研究阶实拍3美女KTV内混战 系因麦霸引发台州50岁男子打开房间内煤气罐引爆将马戏团大哥违章被扣车 停在停车场货车乌政府军控制东部两州2/3领土通过有效供给 扩大消费内需品牌建设成粤东农业工作重点不敢问希区柯克的,问S先生吧:论一部粤社工登记系统 正式上线复原一个活生生的宋朝加沙地带面临严重人道主义危机河源东源发生4.2级地震韩国航天梦再遇坎借力“产学研” 发力技术创新我在底层的生活:当专栏作家化身女服务
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘