配列構造になっている構造体を扱うとき、malloc、freeなどの関数を使用していたことと思います。では、オブジェクトに対して、malloc、freeのような動きをさせたいときにはどうすればよいのでしょうか?そんなときに役立つのがNew、Delete演算子です。
Dimステートメントで定義するのが実体オブジェクトなのに対して、New及びDeleteで扱うオブジェクトはオブジェクトポインタを通したものになります。例えば、"Dim obj As CClass" というコードでは、CClassクラスを雛型にしたオブジェクトobjを生成することになりますが、これと同じ意味を持つコードを記述すると下のようなものになります。
'オブジェクトポインタを定義 Dim pObj As *CClass pObj = New CClass 'オブジェクトpObjに対してのコードをここに記述する Delete pObj
New演算子では、2つ以上のオブジェクトを同時に生成することも可能です。下の例は、値を保持するだけのCNumberBoxクラスを定義し、それを元に複数のオブジェクトを生成しています。
コード中に "ELM(3)" という記述がありますが、これは配列要素数を配列上限値に変換するためのマクロ関数です。要するに、"ELM(3)" という指定は、"2" を指定するのと同じってことになります。
Const ELM(n)=n-1
#N88BASIC Class CNumberBox Public value As Long 'コンストラクタ Sub CNumberBox() Print "オブジェクトが生成されました。" End Sub 'デストラクタ Sub ~CNumberBox() Print "オブジェクトが破棄されました。" End Sub '値をセットする関数 Sub SetData(i As Long) value = i End Sub '値を表示する関数 Sub Show() Print "このナンバーボックスには";value;"が入っています。" End Sub End Class Sub MainProc() Dim pObj As *CNumberBox Dim i As Long '3個のオブジェクトを生成 pObj = New[ELM(3)] CNumberBox '値をセット For i=0 To ELM(3) pObj[i].SetData(i*100) Next '値を表示 For i=0 To ELM(3) pObj[i].Show() Next 'オブジェクトを破棄 Delete pObj End Sub Print "今からMainProc関数を呼び出します。" MainProc() Print "MainProc関数が終わりました。"
講座インデックスへ戻る | ©2005 Discoversoft |