2016-10-25 24 views
1

私はUVMを学びたいと思っていますが、私はこれを知りたがっています。下のダイアグラムは継承を表していますか?たとえばuvm_objectはuvm_voidから継承しますか?私はUVM 1.1 Classのリファレンスを読んでいます。 17ページに記載されています。UVMで継承されたクラス

uvm_voidクラスは、すべてのUVMクラスの基本クラスです。データメンバや関数を持たない抽象クラス です。これにより、Cプログラミング言語のvoidポインター と同様に、オブジェクトの汎用コンテナーを作成することができます( )。 から直接得られたユーザークラスはUVM機能を継承しませんが、そのようなクラスは他のUVMオブジェクトと共にuvm_void型コンテナに配置されることがあります( )。 uvm_objectがuvm_voidに由来する場合uvm_voidから派生したクラスは、任意のUVMの機能を持つべきではありませんので、

は、その後、どのようにそれは、UVMの機能を持っていないが、uvm_objectは、クローン、印刷、パック、アンパック、記録、比較などのようなメソッドを持っています

クラスuvm_ * extend uvm_ *を書くとき。クラスuvm_componentはuvm_objectを継承しますが、継承を推論しますか?どこかには、サブタイプという言葉もあります。サブタイプは派生クラスと同じですか?

enter image description here

答えて

2

A '派生クラスは 'サブタイプ' の形態です。 uvm_objectがuvm_voidに由来する場合Subtypes vs Derived Types in C++

、その後、どのようにuvm_voidから派生したクラスは、任意のUVMの機能を持っていないはずなので、それはUVMの機能を持っているが、uvm_objectクローン、印刷、パック、アンパック、レコードのようなメソッドを持っていない、比較

この概念は正しくありません。派生クラスは新しい機能を実装できます。制限は、抽象クラスからオブジェクトを作成することはできません。親クラスのハンドルは、サブタイプである限り任意のオブジェクトを指すことができます。ハンドルは、独自の型のメソッドとメンバ、およびオーバーライドされた仮想メソッドにのみアクセスできます。したがって、ハンドルがサブタイプオブジェクトを指している場合、そのサブタイプによって追加されたメソッドまたはメンバーにはアクセスできません。

uvm_voidは空の抽象クラスです。あなたはUVMのソースコードに見れば、あなたは、2つのラインとして汚し表示されます。

uvm_voidの目的はそう後で任意のUVMを保持することができます作成​​することができる汎用コンテナに、一般的な親の型を持つことである

virtual class uvm_void; 
endclass 
関連するオブジェクト。そのようなコンテナは、に関係なく uvm_voidから継承するユーザ定義のクラスを保持することさえできます(実際には、これを行うべきではありません)。

uvm_objectは、UVMで使用される基本的な機能を実装します。大多数のUVMクラスはuvm_objectまたはそのサブタイプの1つを継承します。

関連する問題