2016-10-25 2 views
1

Я пытаюсь узнать UVM, и я просто хотел знать, что эта диаграмма ниже представляет наследование, например, uvm_object наследуется от uvm_void? Я читаю ссылку на UVM 1.1 Class. Он упоминает на стр. 17, чтоклассы, унаследованные в UVM

Класс uvm_void является базовым классом для всех классов UVM. Это абстрактный класс без элементов данных или функций. Он позволяет создавать универсальные контейнеры создаваемых объектов, аналогично указателю void на языке программирования C. Пользовательские классы, полученные непосредственно из , uvm_void не наследуют ни одну из функций UVM, но такие классы могут быть размещены в контейнерах с uvm_void вместе с другими объектами UVM.

Если uvm_object происходят от uvm_void, то, как это имеет функциональность УВМ, поскольку классы, полученные из uvm_void не должны иметь какое-либо функциональное УВМ, но uvm_object имеет такие методы, как клон, печать, упаковка, распаковывать, запись, сравнения и т.д. .

Когда мы пишем класс uvm_ * extends uvm_ *, например. class uvm_component расширяет uvm_object, делает ли он вывод наследства? Где-то в нем также упоминается подтип слова. Подтип аналогичен производному классу?

enter image description here

ответ

2

А 'производный класс' является формой '' подтипа. Subtypes vs Derived Types in C++

Если uvm_object происходят от uvm_void, то, как это имеет функциональность УВМ, поскольку классы, полученные из uvm_void не должны иметь какое-либо функциональное УВМ, но uvm_object имеет такие методы, как клон, печать, упаковка, распаковывать, запись, сравнение и т. д.

Данное понятие неверно, производный класс может реализовать новую функциональность. Ограничение, объекты не могут быть созданы из абстрактных классов. Маркер родительского класса может указывать на любой объект, пока он является подтипом. Ручка может обращаться только к методам и членам своего типа, а также к виртуальным методам, которые были отменены. Поэтому, если дескриптор указывает на объект подтипа, он не может получить доступ к методам или членам, которые были добавлены этим подтипом.

uvm_void - пустой абстрактный класс. Если вы посмотрите в исходный код УВМ вы увидите, что он осквернил, как две строки:

virtual class uvm_void; 
endclass 

Цель uvm_void должен иметь общий родительский тип, поэтому позже родового контейнер может быть создан, который может содержать любой УВМ связанный объект. Такой контейнер может даже содержать пользовательские классы, которые наследуют от uvm_void без отношений к uvm_object (на практике это не должно быть сделано).

uvm_object реализует основные функции, используемые UVM. Подавляющее большинство классов UVM наследуют от uvm_object или одного из его подтипов.

Смежные вопросы