C++父类和子类指针的相互赋值和转换

1、指针或引用的 向上转换、向下转换

父类 到 子类 的转换是 向下转换
子类 到 父类 的转换是 向上转换

2、普通指针的转换

转换规则

向上转换 隐式地 进行,即,无需进行强制类型转换。
向下转换必须使用 dynamic_cast 进行强制类型转换。

转换细节

参考下面的博客。
从内存的角度剖析,转换后如何访问指针指向的成员。
代码实例展示不同转换之间的区别。
转换细则的总结

注意事项

  • 父类的指针不能赋值给子类的指针。但是通过强制类型转换,也可以将父类指针强制转换成子类指针后再赋值给子类指针。只是在这种情况下,程序员需要保证被转换的父类指针本来就指向一个子类的对象,这样才是安全的,否则很容易出错。
  • 指针调用的是父类方法 还是子类方法,看的是指针的类型,而不是指针所指对象的类型。
  • 虽然子类指针指向的是一个基类对象,但这并不影响子类成员变量的地址计算方式。

3、智能指针的转换

转换规则

向上转换可以隐式转换。
向下转换必须使用 dynamic_pointer_cast 进行转换。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值