systemverilog中多态能够工作的前提是父类中的方法被声明为virtual的。
再回顾一下,当我们将子类对象实例赋值给一个父类句柄时,就可以使用父类句柄访问子类对象的方法,前提是
在父类的方法声明前面加上关键字“virtual”
一旦某个方法在父类中被声明为“virtual”,它总是“virtual”的,无法在继承类中将该方法修改成非“virtual”的。
下面是一个非virtual方法示例:
class packet; function void disp; $display(from packet); endfunctionendclassclass eth_packet extends packet; function void disp; $display(from eth_packet); endfunctionendclassmodule class_top( ); initial begin packet p1; eth_packet e1 = new; //assign child class handle to parent class variable. p1 = e1; p1.disp; end endmodule
在上面的例子中,我们声明了2个类“eth_packet”和“packet”,其中“eth_packet”扩展自“packet”。
然后我们实例化扩展类“eth_packet”,并将对象实例赋值给父类句柄“p1”。
最后,调用方法“p1.disp.”,结果打印的是父类中的函数声明内容,即使该句柄实际已经指向了扩展类“eth_packet”对象。
仿真log:
from packet v c s s i m u l a t i o n r e p o r t
如果我们在父类函数声明中加上“virtual”关键字
class packet; //parent class method declared 'virtual' virtual function void disp; $display(from packet); endfunctionendclass
打印log显示执行的是子类中声明的函数:
from eth_packet v c s s i m u l a t i o n r e p o r t
51亿元特色工艺晶圆制造项目落地浙江丽水
直升式流量闸门一体机施工方案
iPhone 原来不能手机录屏?这个方法教你破!|神技
荣耀首款双模5G手机:荣耀V30系列的相机商标设计曝光
调速电机不调速的原因
SystemVerilog中的Virtual Methods
人工智能在物联网设备中大量应用
家庭清洁难上加难?快接受家用手持吸尘器的暴击吧!
vivo Z3x,让全面屏为你带来全新的视觉享受
AMR5评论:一个外观惊喜且有实力的小盒子
数字化时代:RFID技术引领资产、服装、仓储管理革新
我国科学家成功实现可见光通信 完美弥补5G短板
新一代区块链去中心化存储网络Pyramid介绍
ZM312型十二路载波机线路放大器的功率放大级部分电路
利用电子管收音机改制小功率胆机
目前全球已有11家运营商宣布有限地推出了5G服务
如何防止物联网装置遭到殭尸网络病毒的攻击
钛阴极电池获突破,将促进未来电池可持续设计
如何对嵌入式设备进行漏洞利用
液晶空间光调制器的原理和应用