为了账号安全,请及时绑定邮箱和手机立即绑定

老师,为啥总是 使用父类对象实例化子类?实际应用中是不是子类对象实例化子类更好?

老师,为啥总是 使用父类对象实例化子类??我想主要是为了教学,对么?

那么,在真实的实际应用设计中,是不是更多的是使用:类对象(类型)实例化子类更好些?这样就能充分的使用子类的所有特殊成员了。。。

正在回答

7 回答

多态解决的是动态绑定的问题。所谓动态绑定,举个例子就是animal.say(),但是不同的不同的animal比如dog,cat,pig它们的叫声是不一样的,animal.say()能识别出不同的动物,从而调用其各自的叫声。一个程序要灵活,很大程度依靠动态绑定,延迟决策到运行时。

1 回复 有任何疑惑可以回复我~
#1

慕移动2313051

"animal.say()能识别出不同的动物",怎么识别啊?一个父类指针不也只能指向一个子类对象吗?要想识别不同的动物,不也得定义多个父类指针,然后分别指向不同的子类对象吗?
2018-06-07 回复 有任何疑惑可以回复我~
#2

Alex_ZM 回复 慕移动2313051

把定义好的多个父类指针*animal1,*animal2,..., *animalN放到animal类型的数组里,for循环调用
2019-01-04 回复 有任何疑惑可以回复我~

集中存储,区别对待,区分调用,子类创建对象后,所继承的所有父类们都可以在这个子类中获取想要的数据的,然后调用

0 回复 有任何疑惑可以回复我~

一个父类实现多个子类的命令,厉害!

1 回复 有任何疑惑可以回复我~

也有些困惑

0 回复 有任何疑惑可以回复我~

Father *p_children = new Children(xxx)  是用父类指针指向子类对象,不是“使用父类对象实例化子类”。 eg:

处理函数  Action(Animal *p);

定义对象是用子类  Pig pig        Horse horse...

开始活动    Action(&pig)     Action(&horse)...     这时只需传子类地址到Action函数,不必写区别处理Pig, Horse...的函数了。  大概思想如此,建议看看多态方面的内容!

4 回复 有任何疑惑可以回复我~

使用父类对象实例化子类

是为了实现多态!   如此场景:

     只需向一群动物发一条指令:开始活动。 猪会睡觉、马会跑、狗会叫...       使用父类指针,一条指令就够了,使用子类指针,每种动物都得区别对待!

3 回复 有任何疑惑可以回复我~
#1

UFO的青春

同学你好,我还是有个疑问,那么你这个思想代码如何实现呢? 比如Father *p_children = new Children(xxx); 父类指针也只能实例化一种动物啊? 按你这么来,岂不也要分别进行猪,马,狗的父类实例化? 恕我愚昧,问下
2016-04-08 回复 有任何疑惑可以回复我~
#2

丿琴丶殇 回复 UFO的青春

你这样就可以直接用p指向Father的各个子类(的成员函数)了,不然还要重新实例化子类的指针来分别指向各自的成员函数
2016-08-28 回复 有任何疑惑可以回复我~

路过~

既然使用了继承机制,就意味着可能会有多个子类去继承父类的内容,继而在不同的子类中增添其独有的部分。童鞋你的意思应该是用父类声明,建立子类的实例吧。那么声明类型是父类,也就代表它能够根据需要指向所需的子类实例。

0 回复 有任何疑惑可以回复我~
#1

chris6179 提问者

不是,我需要的是 用 子类 声明,建立子类的实例。 如代码: Children *p_children = new Children(xxx); 而不是视频教程中的:Father *p_children = new Children(xxx);
2016-01-09 回复 有任何疑惑可以回复我~
#2

Jabin_Aronvoy 回复 chris6179 提问者

要让p_children能够使用Children的独有方法,只需转换回Children即可。那么倘若现在有Children2也继承了Father,我们在不清楚一个对象最终会是Children还是Children2的时候直接声明为Father才是最合适的。实现动态绑定才是我们做这样的声明的意义。如果你确定是要创建一个Children对象,那自然可以像Children *p_children = new Children(xxx);这样声明和实例化对象,但实际上即使出现这样的情况,我们也会习惯性地用父类去声明,为的是提防以后可能会依旧会会发生的动态绑定。
2016-01-09 回复 有任何疑惑可以回复我~
#3

一二三兮 回复 Jabin_Aronvoy

"要让p_children能够使用Children的独有方法,只需转换回Children即可。" 请问如何转换回Children?
2016-08-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66236    人
  • 解答问题       314    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

老师,为啥总是 使用父类对象实例化子类?实际应用中是不是子类对象实例化子类更好?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信