Systemverilog(绿皮书)第八章——OOP进阶(一)类型转换

class Transaction;        //父类
    rand bit [31:0] src;
    function void display(input string prefix = "");      //成员函数display
        $display("%sTransaction: src = %0d", prefix, src);
    endfunction
 endclass
class BadTr extends Transaction;    //子类
    bit bad_crc;
    function void display(input string prefix="");        //同名函数display
        $display("%sBadTr: bad_crc = %b", prefix, bad_crc);
        super.display(prefix);                            //子类调用了父类
    endfunction
endclass

Transaction tr;    //声明父类句柄
BadTr bad;         //声明子类句柄
bad = new();       //构建BadTr扩展对象
tr = bad;          //基类句柄指向扩展对象
$display(tr.src);  //通过父类句柄查找src
tr.display();      //调用父类的display;

若将父类直接赋值给子类,则会报错。即便做了$cast(tgt,src)转换,编译结果为0。

只有源对象和 目标句柄是同一类型,或者目的句柄的扩展类,$cast()函数执行 成功,返回1,否则返回0.

class Transaction;        //父类
    rand bit [31:0] src;
    function void display(input string prefix = "");      //成员函数display
        $display("%sTransaction: src = %0d", prefix, src);
    endfunction
 endclass
class BadTr extends Transaction;    //子类
    bit bad_crc;
    bit bad2;
    function void display(input string prefix="");        //同名函数display
        $display("%sBadTr: bad_crc = %b", prefix, bad_crc);
        super.display(prefix);                            //子类调用了父类
    endfunction
endclass

Transaction tr;    //声明父类句柄
BadTr bad;         //声明子类句柄
bad = new();       //构建BadTr扩展对象
tr = bad;          //基类句柄指向扩展对象
$cast(bad2,tr);    //进行类型转换
bad2.display();

最后bad2.display 调用子类中的display。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值