オブジェクト指向のツボ 〜Vol3. コンストラクタとデストラクタ〜

オブジェクトを生成時には初期化動作をコーディングしたいものです。そこで登場するのが、コンストラクタ。これはオブジェクトが生成されたときに自動的に呼び出される関数だと捉えてもらえればよいと思います。反対に、デストラクタとはオブジェクトが破棄されるときに呼び出されます。

コンストラクタ、デストラクタの定義方法

戻り値なしのメンバ関数のように記述します。関数名は、コンストラクタはクラス名と同じものを、デストラクタはクラス名の前にチルダ "~" をつけたものになります。また、コンストラクタのアクセシビリティは必ずPublicにする必要があります。こちらも注意しておきましょう。アクセシビリティについては、「継承とアクセシビリティ」で説明します。

Class CTest

Public

    'コンストラクタの定義
    Sub CTest()
        'オブジェクト生成時の初期処理をコーディング
    End Sub

    'デストラクタの定義
    Sub ~CTest()
        'オブジェクト破棄時の終了処理をコーディング
    End Sub

End Class

コンストラクタにはパラメータを指定することができますが、デストラクタには指定できないので、注意が必要です。デストラクタは、必ずパラメータ無しの関数でなければなりません。ここまでのことをまとめてみると…

コンストラクタ デストラクタ

サンプルの検証

実際に、サンプルコードを動かし、コンストラクタ、デストラクタの動きを確認してみましょう。

このサンプルでは、CTestクラスを定義し、その中でコンストラクタ、デストラクタを定義します。MainProcはメイン処理を行うための関数として用意してみました。この関数の中でobjというCTestを雛型とするオブジェクトを生成しています。Dimステートメントが実行された時点でコンストラクタが呼ばれ、関数を抜け出す時点でデストラクタが呼び出されることがおわかりいただけるでしょうか?

#N88BASIC


'---------------------
' CTest クラスを定義
'---------------------

Class CTest
Public
    'コンストラクタの定義
    Sub CTest()
        Print "オブジェクトが生成されました。"
    End Sub

    'デストラクタの定義
    Sub ~CTest()
        Print "オブジェクトが破棄されました。"
    End Sub
End Class


Sub MainProc()
    'オブジェクトを生成
    Dim obj As CTest
End Sub


Print "今からMainProc関数を呼び出します。"

MainProc()

Print "MainProc関数が終わりました。"


講座インデックスへ戻る ©2005 Discoversoft