SystemVerilog中超级英雄super

SystemVerilog的OOP编程中,经常需要使用super这个关键字,主要用于子类访问父类中的属性和方法。当然并不是在所有情况下都需要使用super,一般情况下如果子类对于父类中的属性或者方法进行overriden,那么此时如果要引用父类中被overriden的属性或者方法时,就需要明示super。下面通过示例说明super在SystemVerilog中非new方法(super.new的使用和执行可参考之前的一篇短文:【59】new的初始化顺序)中的使用。
【示例】引用父类中未被overriden的属性和方法 

【仿真结果】

 示例中,父类中p_addrp_datapfunc分别在子类中被引用,因为子类中没有对于p_addrp_datapfuncoverriden,所以在子类中即可以像16行和18行那样直接使用也可以像19行和21行那样子不使用,即对于父类中在子类中没有overriden的属性和方法可以选择性的使用super关键字进行引用

【示例】

【仿真结果】 

示例中子类sub_packet对于父类中packet中的p_addrp_datapfunc均进行了overriden,所以从仿真结果可以看出,在28行使用super.pfunc()调用的实际上是父类中的pfunc(),30行调用的p_addr实际上也是父类中的p_addr(h12)31行显示的p_data不是父类中p_data,因为子类对于父类中的p_data进行了overriden,所以此时在没有使用super关键字时,p_data为子类overriden后的。33行的原因同31行,这里不再赘述了。

那么,有朋友可能会问,super如果访问的属性在父类中没有,在父类的父类中存在,还可以使用吗,我们一起看下例。

【示例】 

【仿真结果】

示例中,16行访问的p_what定义于父类packet的父类base中,通过示例结果我们可以看到,通过super关键字可以访问未被重写的属性或者方法,不局限于当前类的父类,当然如果两个或者多个类之间不存在父子关系,那么是不能通过super关键字进行访问的。



全部评论
SystemVerilog中超级英雄super
点赞 回复 分享
发布于 2022-10-15 16:32 河南

相关推荐

Aki-Tomoya:窝趣,人家这是先富带动后富,共同富裕了属于是
投递英伟达等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务