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

向上转型

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

向下转型

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

使用场景

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

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

你可能感兴趣的:(C++,c++)