关于派生类的小问题(想了好久没明白)

menxiang 2004-05-11 09:52:16
派生类对象可作为其相应的对象处理
基类对象不能自动成为派生类的对象

既然派生类继承了基类的成员函数,数据成员
为什么基类对象不能成为派生类对象或者说有危险,而反过来如果派生类中添了几个数据成员,成员函数,有怎么可以作为相应的基类处理呢?
很不明白啊,可以帮我解释一下吗?
谢谢拉!
...全文
39 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
danielpan 2004-05-12
  • 打赏
  • 举报
回复
你可以把基类和派生类想像成一个金字塔,基类在最上面.

如果你要把派生类转变成基类,只要沿着基类的轮廓一刀斩下去,那么下面的派生类就也和基类一样了,当然派生类多出来的那一部分就没有拉(这就是所谓的对象切割,你后面看书应该会看到的,切割也并不是抛弃了那一部分,而是编译器看不到了).

但是如果要把基类转变成派生类就办不到了,因为基类怎么变也不能把自己的面积变大阿,变大了就意味着要添加东西了.
RookieStar 2004-05-12
  • 打赏
  • 举报
回复
典型的多态问题!涉及到upcast和downcast的区别。

多态的本质是后期绑定,是运行期的概念。后期绑定有得必有失,得到了多态的实现,失去了对被绑对象相对基类新增的那些接口的操作。

从接口的角度来看:基类拥有的接口派生类都有继承,但派生类可能新增一些接口,这样upcast的目的就是用基类的接口控制派生类相应的接口,而downcast以后,基类有了形式上的“新接口”,但它所对应的操作是未定义的。
kuibobo 2004-05-12
  • 打赏
  • 举报
回复
父子关系嘛

ra3 2004-05-11
  • 打赏
  • 举报
回复
因为派生类比基类多了一些功能, 多的这部分是基类不能的, 基类只能做属于他自己的那一部分。
新自由呼吸 2004-05-11
  • 打赏
  • 举报
回复
简单来说,派生类与基类相比,有自己的"特色",也可以说处理问题更细了
基类有的,派生类都有,因此基类能处理派生类的对象,而派生类的"特色",基类却没有,派生类如何处理基类的对象?
freefalcon 2004-05-11
  • 打赏
  • 举报
回复
为什么基类对象不能成为派生类对象或者说有危险

因为派生类将比基类具有更多的方法(不然,你派生它有何意义),而这些方法很可能用到派生类自己的成员(基类)没有,你说如果把一个基类对象转换成派生类对象的话,那我通过派生类特有的成员函数去访问会发生什么?

64,637

社区成员

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

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