SystemVerilog之句柄转换——$cast

$cast(子,父),只有父类指向子类或者子类扩展类的时候才能转换成功。且转换后的句柄只能指向父类的空间。

如下代码及结果所示。

class father;
	int i=0;
endclass

class child extends father;
	int i=1;
	int j=9;
endclass

module test;
	child c1,c2;
	father f1,f2;
	int flag;
    initial begin
	f1=new();
	c1=new();
	flag=$cast(c1,f1);  //父类指向父类,子类指向子类,转换失败
	if(flag==1) begin
		flag=0;
		$display("1 success:f1.i=%0d",f1.i);
		end
	else $display("1 failed:f1.i=%0d",f1.i); //转换失败,父类指向父类的i=0
	f1=c1;          //父类指向子类对象,子类指向子类,转换成功
	flag=$cast(c2,f1);
    c2=new();
	f1=c2;  //父类句柄指向子类对象,f1.i=0还是父类的变量值
	if(flag==1)begin
		flag=0;
		$display("2 success:f1.i=%0d",f1.i);
		end
	else $display("2 failed:f1.i=%0d",f1.i);//转换成功,但父类仍指向父类的i=0
    end
endmodule

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值