【问题标题】:classes inherited in UVM在 UVM 中继承的类
【发布时间】:2016-10-25 09:42:55
【问题描述】:

我正在尝试学习 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 具有克隆、打印、打包、解包、记录、比较等方法。

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

【问题讨论】:

    标签: uvm


    【解决方案1】:

    “派生类”是“子类型”的一种形式。 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 或其子类型之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2023-02-09
      • 1970-01-01
      • 2020-04-18
      • 2023-03-27
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      相关资源
      最近更新 更多