virtual function/task的使用:
class a;
virtual function void a1();
$display("123");
endfunction
function void a2();
$display("456");
endfunction
endclass
class b extends a;
virtual function void a1();
$display("789");
endfunction
function void a2();
$display("101112");
endfunction
endclass
module tb;
initial begin
a A;
b B;
A=new();
B=new();
A.a1;
A.a2;
B.a1;
B.a2;
A=B;
A.a1;
A.a2;
B.a1;
B.a2;
end
endmodule
根据运行结果可以看出,当将子类b的句柄B赋值给父类a的句柄A后,通过A索引的virtual function a1会直接索引到子类中的同名a1,而没有virtual的function a2则不会。
由此可以实现的是通过父类直接索引到子类中的方法。