基类指针可以指向衍生类对象,基类指针不能转换为派生类指针

基类指针可以指向派生类对象,基类指针不能转换为派生类指针?
最近被这个概念给搞晕了。
基类指针可以指向派生类对象,但是基类指针不能转换为派生类指针。这句话是对的吗?
什么上行转换安全,下行转换不安全的。难道基类指针指向派生类对象不是下行转换?
------解决方案--------------------
首先,没有从基类类型到派生类型的(自动)转换,因为基类对象不包含派生类型特有的成员。如果允许用基类对象给派生类对象赋值,那么就可能会访问不存在的成员。
基于这个原因,即使当基类指针或引用实际绑定到派生类对象时,从基类到派生类的转换也存在限制。因为编译器在编译时无法得知这个转换在运行时是否安全。编译器确定转换是否合法,只看指针或引用的静态类型。如果可以确定从基类到派生类的转换是安全的,可以使用static_cast强制类型转换。
------解决方案--------------------
引用:
Quote: 引用:

首先,没有从基类类型到派生类型的(自动)转换,因为基类对象不包含派生类型特有的成员。如果允许用基类对象给派生类对象赋值,那么就可能会访问不存在的成员。
基于这个原因,即使当基类指针或引用实际绑定到派生类对象时,从基类到派生类的转换也存在限制。因为编译器在编译时无法得知这个转换在运行时是否安全。编译器确定转换是否合法,只看指针或引用的静态类型。如果可以确定从基类到派生类的转换是安全的,可以使用static_cast强制类型转换。

那请问上行转换安全,下行转换不安全是怎么一回事?

基类有的,派生类一定有,派生类有的,基类不一定有。要是支持下行转换(隐式),那么你将基类指针赋给派生类指针,并执行派生类的操作,如果基类没有,怎么去执行。