虚方法 virtual task/function
(1) 类中的方法可以在定义的时候通过添加virtual关键字来声明一个虚方法,虚方法是一个基本的多态性结构.
(2) 虚方法为具体的实现提供一个原型,也就是在派生类中,重写该方法的时候必须采用一致的参数和返回值.
(3) 虚方法可以重写其所有基类中的方法,然而普通的方法被重写后只能在本身及其派生类中有效。
(4) 每个类的继承关系只有一个虚方法的实现,而且是在最后一个派生类中。
virtual class
- 在class声明之前加上了virtual关键字,用于定义特定目的模板类,即定义了扩展类需要实现的原型。
- 在扩展类中需要实现virtual class中的方法。
- virtual class无法创建相应的对象(object)。尝试使用构造函数new()构造 virtual class的对象(object)将给出编译错误
- 在UVM类库中定义的类库大多数为virtual class,几乎所有用户定义的UVM验证平台都是根据用户定义的类构建的,这些类是UVM组件类的扩展。例如所有用户定义的transactions都是uvm_sequence_item virtual class的扩展类,所有用户定义的sequence都是uvm_sequence virtual class的扩展类。
- UVM基类库是用户扩展以构建UVM验证平台的一组模板文件。
使用virtual task/function — (子类将父类 display function进行了改造 — 即多态):
不使用virtual — (子类将父类 function 各自是各自的):