为什么不直接用子类引用指向子类对象,而用父类引用指向子类对象

半醉看夕阳 2015-10-21 09:23:40
在实现多态的过程中,为什么不直接让子类引用指向子类对象,而要让父类引用指向子类对象,这样做好什么好处?谢谢
...全文
1497 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwxtest0 2019-03-03
  • 打赏
  • 举报
回复
多态的精髓就在这里了
qq_34409626 2019-02-27
  • 打赏
  • 举报
回复 1
当有多个继承,关系很乱的时候就展现其作用了:
假想,如果自己调用自己的方法,就会不知道你是哪个类的派生,没有多态的作用了。
所以总有老子叫儿子办事的道理:
老爸(父类)指定个工具给儿子(派生类),儿子才可以用这个工具做其他事情,我们也知道他那个工具来自他爸,认祖归宗嘛
www_adintr_com 2015-10-24
  • 打赏
  • 举报
回复 1
你针对子类写的一个函数就只能用于操作这个类的对象 你针对父类写的一个函数可以操作所有从这个父类继承的子类的对象 这是对 一个东西进行操作 和 对一类东西进行操作 的区别
gznotes.net 2015-10-24
  • 打赏
  • 举报
回复 2
我也举个例子: 如果你写框架(framework)的话也许会体会深刻。 在写框架代码时,你往往不知道每个对象的具体类型,只知道他们共同的父类是什么。 在框架的代码里,也就是通过管理这些具体类型的父类来实现框架代码的通用性的,也可以说扩展性(增加新的子类)。 比如: 你写了一个飞机游戏,画面里出现什么类型飞机是随机决定的,你的代码里也就不可能用一个具体飞机类型来操作。 所以,往往是随机生成各种类型飞机,他们有共同的父类,你的代码就可以用父类指针来控制行为。比如中弹后的能量损失多少之类,每种飞机可能不同。 以上,不知道对楼主有帮助没。
bluemei-lee 2015-10-23
  • 打赏
  • 举报
回复 1
好处之一: 上层逻辑抽象,独立清晰, 方便以后扩展. 举个常见的例子,比如设计一个网卡驱动类,那么上层只需要考虑网卡的功能接口,具体到不同厂商只要遵循接口实现不同的子类. 这时调用方就用接口(或者父类)来调用,而不是依赖某个特定厂商A的网卡,这样即使换一种厂商B网卡也不需要重新改代码,而只要实例化一个厂商B驱动对象赋给父类指针.
ztenv 版主 2015-10-23
  • 打赏
  • 举报
回复
当参数类型不确定时(比如:A是父类,B、C、D是子类;参数可能需要传递B类型或C类型或D类型指针或引用),使用子类型是不是会受限制?或增加了函数(重载)?如果参数类型指定为父类型A的指针或引用,那函数只要有一个就够了,即使以后再增加了D类型,那么函数的签名也不会发生变化,通过多态机制可以调用到子类型的函数(is-a关系) 子类型一般是具体类型,个数有可能是不可预知的,有可能会变化的; 父类型一般是抽象类型,只要抽象的好,发生变化的可能性比较小;
张小飞Official 2015-10-22
  • 打赏
  • 举报
回复
好处就是你不用重新再去定义一个类。 楼上也说了这是面向对象语言的一大特性,对象很基本的一个特性就是继承,但是在函数中是怎么看出来这两个类是继承关系呢,只能在使用的时候不光是提醒你自己,这个类是另一个类的子类,也是方便其他人去阅读你的代码。假如多重继承与虚类存在的话使用的时候不加父类声明岂不是很容易乱么
罗博士 2015-10-22
  • 打赏
  • 举报
回复
方便代码以后的修改或者升级。
yu.sang 2015-10-21
  • 打赏
  • 举报
回复
首先当然可以让子类指向子类的方法,但是这么使用的场合觉对不是多态的场合。 要理解多态的作用,结合实际的使用,就能很清楚知道这么做是多大的方便的,这可是面向对象语言的一大特性啊。
dustpg 2015-10-21
  • 打赏
  • 举报
回复
对外暴露一致的接口方便调用, 你不知道这个东西是什么, 但是知道它能干什么就行.

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧