关于网友提出的“ 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?”问题疑问,本网通过在网上对“ 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?描述:
最近被这个概念给搞晕了。
基类指针可以指向派生类对象,但是基类指针不能转换为派生类指针。这句话是对的吗?
什么上行转换安全,下行转换不安全的。难道基类指针指向派生类对象不是下行转换?
解决方案1:
基类有的,派生类一定有,派生类有的,基类不一定有。要是支持下行转换(隐式),那么你将基类指针赋给派生类指针,并执行派生类的操作,如果基类没有,怎么去执行。 解决方案2:
首先,没有从基类类型到派生类型的(自动)转换,因为基类对象不包含派生类型特有的成员。如果允许用基类对象给派生类对象赋值,那么就可能会访问不存在的成员。
基于这个原因,即使当基类指针或引用实际绑定到派生类对象时,从基类到派生类的转换也存在限制。因为编译器在编译时无法得知这个转换在运行时是否安全。编译器确定转换是否合法,只看指针或引用的静态类型。如果可以确定从基类到派生类的转换是安全的,可以使用static_cast强制类型转换。