广州网站建设选哪家,阳江市网站建设,网站游戏案例,微信app小程序1、使用虚方法目的 通过在父类里定义虚方法(task or function)#xff0c;可以在当父类句柄调用一个方法时候#xff0c;前提是若是这个句柄指向了子类对象#xff0c;则调用的方法为子类的方法而不是父类的方法。
1.1、实例理解#xff1a;将子类句柄赋值成父类句柄
mod…1、使用虚方法目的 通过在父类里定义虚方法(task or function)可以在当父类句柄调用一个方法时候前提是若是这个句柄指向了子类对象则调用的方法为子类的方法而不是父类的方法。
1.1、实例理解将子类句柄赋值成父类句柄
module tb_virtual();
class Transaction;
bit [31:0] src 100;
function void display();$display(Transaction src %0d,src);
endfunction
endclassclass BadTr extends Transaction;
bit [31:0] bad_src 200;
function void display();super.display();$display(BadTr src %0d,bad_src);
endfunction
endclassinitial beginTransaction tr;BadTr bad,bad2; bad new(); //构建了一个子类的对象tr bad; //父类的句柄指向子类的对象$display(tr.src);//显示父类的变量的内容tr.display; //调用的是父类的函数
end
endmodule运行结果如下 1.2、将父类句柄赋值成子类句柄
initial beginTransaction tr;BadTr bad,bad2; tr new();//创建一个父类对象bad tr;//将父类对象赋值给子类句柄ERROR不会执行$display(bad.bad_src);//父类对象不存在该成员变量
end 编译报错 1.3、使用系统函数$cast()
initial beginTransaction tr;BadTr bad,bad2; bad new();tr bad; //父类的句柄指向子类的对象$cast(bad2,tr);if(!$cast(bad2,tr))$display(cannot assign tr to bad2);$display(bad2.bad_src);bad2.display();
end 运行结果
2、结论
1通过在父类里定义虚方法(task or function)可以在当父类句柄调用一个方法时候前提是若是这个句柄指向了子类对象则调用的方法为子类的方法而不是父类的方法。 2将父类对象赋值给子类句柄ERROR不会执行 3父类的句柄指向子类的对象但是不能访问子类成员使用虚方法可以访问子类的函数或者任务 4使用系统函数$cast()进行类型转换转换之后的新句柄可以访问函数与变量