C++ 向上转型和向下转型的含义以及使用场景

向上转型

派生类对象转型为基类对象(包括指针和对象),直接转化由编译器自动完成,不用cast,并且是绝对安全的。
内存里面:基类对象相当于只是换了个地址。换成了派生类对象中存储基类成员的内存地址。但是派生类对象中有的,基类没有的那些变量仍然留在了内存中。(保留了再次从基类转换成派生类的可能性)

向下转型

不能在对象之间转换。只能在指针和指针之间、基类左值和派生类引用之间转换。
危险是什么意思?应该是指把基类对象的地址给了派生类对象(向下转换)。派生类对象如果拥有自己独有,而基类没有的成员变量,就是危险的。因为当派生类对象试图是访问这些独有的成员的时候,访问的其实是未知的内存空间。但是如果基类对象原本指向的就是派生类的空间,这个转换就是安全的。
内存里面:相当于把基类起始地址赋值给派生类对象,因为基类有的成员,派生类中也一定有。

使用场景

1、向上转型:可以实现动态多态,即基类对象执行的方法实际上是运行过程中他的实际类型的方法。这时候调用的基类方法,实际上是派生类的方法。
2、向下转型:向下转型是在向上转型的前提上完成的,如果没有向上转型(从派生类变成基类),向下转型是危险的。那么为什么要向下转型呢?因为向上转型之后的对象变成了基类对象,只能执行基类的方法,而有些方法是派生类独有的,为了执行这些方法,就需要向下转型回来。

(个人理解,有错请指出)

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值