【C++】【读个小故事就弄懂】为什么基类指针可以指向派生类对象,而派生类指针却不可以指向基类对象?(最易懂最有趣最生动的举例)
在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间。
当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素。
于是基类的指针就可以访问到基类也有的元素了,但是此时无法访问到派生类(就是N之后)的元素。
我们来举一个例子:
我们需要给一个人打电话,这时候我们有很多种选择,可以用功能丰富多彩的智能手机;可以用小灵通;可以用办公桌上的座机;如果能打的话,甚至我们可以用大哥大。因为我们使用的功能是电话共有的基础功能——打电话,电话是一个基类,打电话是他所具有的函数,座机是电话,智能手机是电话,小灵通是电话,大哥大也是电话。他们都“是这个电话类”,但是具体功能却不一样。如果说一个最基本的电话只有打电话的功能,他无法向智能手机那样上网冲浪,随时随地TIMI一下,也就是说,基类指针是无法调用派生类新增的函数的。
那么,关于虚函数的使用呢?
如果派生类继承了基类的虚函数并进行了添加或修改,那么将派生类对象赋给基类对象后,基类对象调用虚函数的时候执行的将是派生类的方法。
比如说,早期手机上网还没那么普遍,流量费很贵的时候,有一部手机讷机亚,他预留了一些空间,但是空间里什么都没有。还有一部手机莫拖洛那,他在出厂的时候,已经预装了一些东西,魂斗罗、祖玛、坦克大战。这个空间就相当于虚函数,讷机亚的空间里一片空白,是一个virual ReturnType space(){cout<<“啥也没有”<<endl};函数。而莫拖洛那的空间里有很多应用,是一个virual ReturnType space(){cout<<“魂斗罗”<<endl;
cout<<“祖玛”<<endl;
cout<<“坦克大战”<<endl;
};的虚函数,当莫拖洛那通过数据线或蓝牙(不记得那时候蓝牙能不能传输应用了)将他的应用拷贝到讷机亚里,讷机亚就拥有了莫拖洛那拥有的应用,可以在讷机亚上玩游戏了。
用电话的例子勉强证明一下基类指针指向派生类对象的问题,接下来我们再来证明一下派生类指针为什么不能指向基类对象的问题。
说,咱们开了一家相亲网站,网站刚一注册就有诸多嘉宾入住。我们开的是一个普普通通的男女以结婚为目的的相亲网站,自然是要区分男人女人来注册。但是由于前端小姐姐人手不够,目前还没有增加详细信息的注册要求,注册来的嘉宾同一标识类别为“人”,却没有区分男人还是女人。但是小姐姐目前做好了头像上传的功能,所以嘉宾们的头像五花八门形形色色的。
开门第一天,就有一个小伙子联系我们的工作人员:“我想找一个对象,这过年了家里催的那叫一个急啊!我妈说两年内一定要抱上乖孙,快帮帮我吧!”,于是工作人员拿出了百分百的热情对待顾客,通过“头像筛选”,最后选出了几个可爱俏皮的“头像”人选,帮助小伙子和那几个人选牵线搭桥,进行联系。
经过交流,小伙子还真就找到一个兴趣相投,非常聊得来的人选。于是小伙子迫不及待的联系工作人员:“我觉得这个‘恬淡兰花’非常对我心意!”
工作人员一听这好啊,难道咱这网站刚一开业就成了一单?于是抓紧联系了“恬淡兰花”,恰巧又与委托人在同一个城区,于是安排两人下午在浪漫北北山见面。
浪漫北北山位于城区北区北侧,因此有了北北山的名号,据说很久以前北北山有别的名字,并且山上一处石壁上还刻着他的名字,但是有天沙尘暴来袭将那石壁摧残的不像样子,不知道哪位后来者爬到石壁对面处远眺,依稀可见两个北字,又因为北北与baby谐音,于是成了情侣约会常来之处。
今日又恰逢21年3月14日,大家都说在今天来浪漫北北山,就可以“爱你一生一世”。又有攀岩高手决定在今天直播北北山攀岩,带人们不知多少年后真正的一观那刻着北北山的石壁。所以今天的北北山着实热闹,安排两人在此相亲也别有一番韵味,不愧是我们的工作人员,专业!
时间来到了下午,因为是春季,所以天气也并不炎热,阳光晴朗,小伙子按约定的时间,捧着鲜花来到了相约的地点,身边一对又一对的情侣路过让他一阵艳羡,同时越发的期待了起来“恬淡兰花”。“希望她是一个温柔、恬淡、端庄文雅、漂亮的人呢”,他想。
远处又起了一阵喧哗,小伙子朝那边一看,原来是攀岩高手在那悬崖峭壁上利用工具左右腾挪,已经到达了那刻着北北山的石壁了。
高手爬到石壁上,将自己的安全绳固定在石壁旁,石壁处刚好有一处小平台可以站住,他拿出了铲子和一些工具,同时将手机朝着石壁上的字固定好。
“各位老铁们,今天北北山的名字就将真正显现于世了!老铁们来波点赞,我这就将上面的尘土砂石都给清理了!”直播间里顿时走起了一波六六六。
小伙子正看得出神,这是一只白净的手搭在了他的肩膀上,小伙子心中一动,“是她来了?”,他惊喜的转过了头。
温柔、恬淡、温文尔雅、面带笑容、漂亮。看到眼前这人,刚刚所预想的特征都浮现了出来。
但……
“为什么是个男人啊喂??”小伙子将鲜花扔在地上,恼怒的吼道。
“兰花,四君子也。”恬淡兰花轻轻一笑,摸了摸小伙子头。“吾与君相交甚欢,不若结为好友?”
小伙子扑到恬淡兰花怀里,崩溃大哭:“可是你不会生孩子啊呜呜呜呜呜呜!我妈他揍我咋办啊呜呜呜呜呜呜”
此时,攀岩高手也终于清理完了石壁,北北二字终于清晰可见,但同时两个北字下侧又露出了一角。
“咦,这是?”高手顿时惊奇,连忙抬手继续清理下侧砂石。
砂石逐渐被清理掉,两个“月”字隐隐约约的显现了出来……
有点跑题了,容我强行解释一下。“男人”、“女人”就像是“人”的派生类。派生类除了包含基类的一部分,还包含他所派生的部分。当我们用派生类指针来指向基类对象时,就会发生越界的情况,也就是我们不知道这个“人”到底是男人还是女人,是大人还是小孩,一切都是未知的,不允许的。
【C++】【读个小故事就弄懂】为什么基类指针可以指向派生类对象,而派生类指针却不可以指向基类对象?(最易懂最有趣最生动的举例)相关推荐
- c++ 读写锁_一篇文章弄懂MySQL锁机制
一.锁的分类 1.按锁的粒度划分,可分为表级锁.行级锁.页级锁(mysql) 2.按锁级别划分,可分为共享锁.排他锁 3.按使用方式划分,可分为乐观锁.悲观锁 (一).按粒度划分的锁 1.表级锁(偏向 ...
- 三个小故事,读懂印章的“前世今生”
为什么要盖章? 盖章为了什么? 印章是如何演变的? -- 今天,通过三个小故事带您读懂签章的"前世今生". 一.远古时代:见此物如见其人 原始社会都是小部落群居,人们日出而作.日落 ...
- 关于大数据,需要你读懂的10个小故事
自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...
- 大数据陷阱:需要读懂的10个小故事
自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...
- 来自大数据的反思:需要你读懂的10个小故事 三
故事08:谷歌流感预测:预测是如何失效的? 2009年2月,谷歌公司的工程师们在国际著名学术期刊<自然>上发表了一篇非常有意思的论文[11]:<利用搜索引擎查询数据检测禽流感流行趋势 ...
- 《腾讯传》的四个小故事读懂职场进阶之道
吴晓波的<腾讯传>,可能是最近几年最好看的企业史作品了. 从开始调研到完成写作,吴晓波用了五年时间. 中间一度曾停笔,用他的话来说,谁能定格一座正在喷发的火山? 纵横十八年,洋洋三十万字. ...
- 感人的小故事,谁懂谁就会流泪
感人的小故事,谁懂谁就会流泪 1.未婚夫.男友.情人.蓝颜一桌打牌,女人倒水出来,被障碍物绊倒,腿被碎玻璃划伤.未婚夫急忙起身把女人抱到沙发上,男友跑去拿医药箱,情人在一边哄女人一边咒骂障碍物 ...
- 一文彻底弄懂大端与小端
一文彻底弄懂大端与小端 1. 端模式起源 端模式(Endian)起源于<格列佛游记>, 书中根据鸡蛋敲开的方式不同将所有人分为2类,从圆头开始敲的人被归为Big Endian,从尖头开始敲 ...
- 彻底弄懂计算机中的大端小端
大端与小端这个问题在做和其他设备交换原始字节数据的时候是非常重要的概念,也是必须要掌握的内容,但是很多人就是仅仅是稍微有些了解,但每次真正去做东西的时候,还是要花半天去想,博主就是这样的人,出现这样问 ...
最新文章
- 揭秘PHP深受Web开发者喜爱的原因
- Servlet的Filter的使用
- python基础知识~ 函数详解2
- oracle的in的值超过3000,处理 Oracle SQL in 超过1000 的解决方案
- 使用ocr的自动备份还原ocr
- django定时任务
- 安装杀毒软件是保障计算机安全,安装杀毒软件是保障计算机安全的唯一措施
- poj 1182 食物链 (并查集)
- tomcat日志输出控制
- 项目计划与控制-若干题目
- Python爬虫之Scrapy框架结构
- C++ OpenCV制作九宫格拼图游戏
- 11.4.8 YEAR(date)函数
- python基础篇day4——json,环境变量,装饰器
- pdf怎么插入页码步骤介绍
- Flutter 自定义组件实战之Cupertino(iOS)风格的复选框
- 固有的不可移植的特征之volatile限定符
- AD导出PDF问题解决办法
- ubuntu smba常用设置
- 商业模式创新与设计 -- 黄力泓