在UVM中继承的类

时间:2016-10-25 09:42:55

标签: uvm

我正在尝试学习UVM,我只想知道下面的图表是否代表了遗传,例如uvm_object是否从uvm_void继承?我正在阅读UVM 1.1类参考。它在第17页提到了

  

uvm_void类是所有UVM类的基类。它是一个   没有数据成员或函数的抽象类。它允许   要创建的对象的通用容器,类似于void指针   在C编程语言中。用户类直接派生自   uvm_void不继承任何UVM功能,但这样的类可能   与其他UVM对象一起放在uvm_void类型的容器中。

如果uvm_object是从uvm_void派生的,那么它是如何具有UVM功能的,因为从uvm_void派生的类不应该具有任何UVM功能,但是uvm_object具有克隆,打印,打包,解包,记录,比较等方法。

当我们写类uvm_ * extends uvm_ *例如。 class uvm_component扩展uvm_object,它是否推断继承?在某处它还提到了subtype这个词。子类型与派生类相同吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

'派生类'是'子类型'的一种形式。 Subtypes vs Derived Types in C++

  

如果uvm_object是从uvm_void派生的,那么它是如何具有UVM功能的,因为从uvm_void派生的类不应具有任何UVM功能,但是uvm_object具有克隆,打印,打包,解包,记录,比较等方法。

这个概念不正确,派生类可以实现新功能。限制,无法从抽象类创建对象。父类句柄可以指向任何对象,只要它是子类型即可。句柄只能访问自己类型的方法和成员,以及被覆盖的虚拟方法。因此,如果句柄指向子类型对象,则它无法访问由该子类型添加的方法或成员。

uvm_void是一个空的抽象类。如果您查看UVM源代码,您会看到它被玷污为两行:

virtual class uvm_void;
endclass

uvm_void的目的是拥有一个共同的父类型,因此稍后可以创建一个可以容纳任何UVM相关对象的通用容器。这样的容器甚至可以保存从uvm_void继承的用户定义的类,而与uvm_object无关(实际上不应该这样做)。

uvm_object实现了UVM使用的基本功能。绝大多数UVM类都继承自uvm_object或其子类型之一。