SV中$cast----子类句柄与父类句柄转化问题

2 篇文章 0 订阅

在说明$cast的用法之前,我们先思考一个问题,子类句柄可以指向哪些对象?父类句柄可以指向哪些对象?
如下图所示,需要明确:
1)子类句柄只能指向子类对象,不能指向父类对象。
2)父类句柄可以指向父类对象,也可以指向子类对象(这是因为多态-virtual的存在,父类得以引用子类对象中的同名成员,该引用不能访问子类新增加的成员)。

因此当子类句柄指向父类对象时,仿真将报错。
在这里插入图片描述
在这里插入图片描述
现在回到$cast的用法:

$cast(子类句柄,父类句柄)

其会检查该两种句柄所指向的对象是不是相同的,如果是则返回1,否则则0。
可以理解为将父类句柄赋值给子类句柄,即将子类句柄指向父类句柄所指向的对象。此时若父类句柄指向的是子类类型的对象则结果就是子类句柄指向子类对象,仿真不会报错,但如果父类指向的是父类对象则结果就是子类句柄指向了父类对象,这是仿真不允许的,会报错。
因此简而言之:$cast会检查父类句柄是不是指向子类对象,是则转化成功,否则失败。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值