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 河南

相关推荐

双非阴暗爬行:我来看看笑死我了,这名字取得好想笑(没有不好的意思)
点赞 评论 收藏
分享
(黑话警告⚠️:hc=岗位数量, mt=导师, ld=直属领导, cr=代码审查)25年1月,我加入了字节某前端团队,并期望能在这里待到秋招并尝试转正。然而,就在上周,ld 找我1v1,告诉我,我的能力和团队预期不太匹配,并和我劝退。晴天霹雳吗?肯定是有的。那一刻,脑子里嗡嗡作响,各种情绪翻涌。但冷静下来想想,这几个月,自己在能掌控的范围内,确实有不少地方做得不尽如人意。所以,我想把这段不算成功的经历复盘一下,希望能给同样在努力转正的你提个醒,避开我踩过的坑。一、ld 的要求要注意刚进组时,ld就和我聊过转正的事。我当时发问:“咱们这儿有hc 吗?” ld没直接回答,只是说:“看能力,能力到了...
牛客上的彭于晏:过来人告诉你,入职后要做的第一件事儿不是说主动找活儿做,你要先学会融入团队,摸清ld的性格,投其所好。然后才是展示你的能力,能力上可以说技术或者业务,以业务能力为主,技术能力为辅。优先保证自己对业务需求的开发保证质量效率,然后再谈技术的问题,不要你觉得啥啥啥不行就想着整体优化了(发现校招生最喜欢干这事儿),我工作快5年了发现搞这种的最后都没啥好的结果,产出没有还引入新的bug,校招或者实习的水平看到的问题别人看不到嘛?为什么别人不去搞?浪费时间还没收益的事儿不要去做,技术上的能力体现在对于一个新需求,在不符合现在业务发展的架构设计上,你能拿出好的技术方案同时能考虑到后续业务发展逐渐将技术架构引入合理的架构,这是一个漫长的过程而不是一次性的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务