コンストラクタ
SystemVerilogでは、C++のようにクラスにはコンストラクタ(constructor)が必要です。
コンストラクタは、new関数を定義することで実現します。
Sample_c s = new;
new関数は、次のように定義します。
function new();
...
endfunction
この例では、new関数は引数を持ちませんが、引数を持つこともできます。
function new( int a, int b );
...
endfunction
SystemVerilogでは、C++のように複数のコンストラクタを持つことはできません。
したがって、クラス定義では、new関数は1つだけ定義します。
new関数は関数ですが、戻り値の型を示す必要はありません。
すべてのクラスは、デフォルトのコンストラクタを持っています。
親クラスのコンストラクタ
デフォルトのコンストラクタは最初に、親クラスのコンストラクタを呼びます(super.new)。
その後に、自分が持っている各メンバー(プロパティ)の初期化を行います。
親クラスのコンストラクタが引数を必要とするとき、2つの方法があります。
1)、コンストラクタ(new関数)の中で親クラスのコンストラクタに対して、引数を指定する。
function new();
super.new(2);
endfunction
2)、クラス定義のときに、継承する親クラスにコンストラクタの引数を指定する。
class ExtendedClass extends BaseClass(2);
2)のケースの書き方は、あまり見たときはありません。