1.factory 的重载和之前的重载都不一样。

2.以8.1.1 为例,稍有不同:

UVM:8.2.1 factory 机制式的重载_错误提示

结果:

UVM:8.2.1 factory 机制式的重载_ide_02

1)传递的类型为bird,但都指向parrot 的指针。


3.factory机制的重载功能,原理:

UVM:8.2.1 factory 机制式的重载_错误提示_03

UVM:8.2.1 factory 机制式的重载_错误提示_04

1)例化时,UVM 会通过factory 机制在内部的表格中查看是否有相关的重载记录。

2)set_type_override_by_type相当于在factory 的机制中加入了一条记录。,当查到有重载是,会用新的代替旧的。


4.使用前提:

1)无论重载的类(parrot)还是被重载的类(bird),定义时都要注册到factory中。

2)被重载的类在例化时,使用factory 机制例化,而不能用new:

UVM:8.2.1 factory 机制式的重载_ide_05

上述不会生效,得到结果和8.1.1一样。

3)重载类和被重载类有派生关系。重载类必须派生自被重载类,被重载类必须是重载类的父类。

4)components 和object 不能互相重载。因为关系太远。


5.如果没有派生关系:

UVM:8.2.1 factory 机制式的重载_ide_06

UVM:8.2.1 factory 机制式的重载_父类_07

错误提示:

UVM:8.2.1 factory 机制式的重载_父类_08


6.重载与被重载顺序颠倒:

1)上图红色。

2)报错:

UVM:8.2.1 factory 机制式的重载_父类_09