systemverilog-多态性

时间:2015-11-15 06:41:28

标签: oop system-verilog

以下代码的输出是 -

这是A级

这是A级

但据我说,输出应该是 -

这是A级

这是扩展类A

因为在打印第一行之后,我们将EA类型的对象分配给类型为A的对象 -

EA my_a = my_ea;

然后当我们这样做时 - my_a.disp();

它应该打印 - 这是扩展类A

请告诉我是否正确?

class A ; //class A
task disp (); 
$display(" This is class A "); 
endtask 
endclass 

class EA extends A ; //subclass EA 
task disp (); 
$display(" This is Extended class A "); 
endtask 
endclass 

program main ; 
EA my_ea; 
A my_a; 

initial 
begin 
my_a = new(); 
my_a.disp(); 

my_ea = new(); 
my_a = my_ea; 
my_a.disp(); 
end 
endprogram 

1 个答案:

答案 0 :(得分:3)

您需要将任务声明为虚拟:

class A ; //class A
  virtual task disp (); 
    $display(" This is class A "); 
  endtask 
endclass