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

来源:互联网  时间:2016/8/26 19:34:53

关于网友提出的“ 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?”问题疑问,本网通过在网上对“ 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?
描述:

最近被这个概念给搞晕了。
基类指针可以指向派生类对象,但是基类指针不能转换为派生类指针。这句话是对的吗?
什么上行转换安全,下行转换不安全的。难道基类指针指向派生类对象不是下行转换?


解决方案1:

引用 6 楼 maomao85 的回复:
Quote: 引用 5 楼 zhuyf87 的回复:

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

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

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

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

上一篇关于在String类中重载运算符后出现的程序崩溃问题
下一篇如何编写一个计算某个结点在二叉树中深度的函数
明星图片
相关文章
《 基类指针可以指向派生类对象,基类指针不能转换为派生类指针?》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)