コンストラクタによるオブジェクトの初期化

 コンストラクタは、クラスからインスタンス生成をする際にフィールド変数に値を設定するなどの初期設定を行う機能です。インスタンス生成を行う際に呼び出される特別なメソッドを記述します。

コンストラクタ定義の書式
アクセス修飾子 Sub New(仮引数リスト)
 フィールドの初期化処理など
End Sub

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 ConstractorTest

サンプルダウンロード

○ 作成の準備

 Carクラスにコンストラクタの記述を追加しましょう。「CapsuleTest」をコピーしてプロジェクトを作成してください。今回は、インスタンス生成時にガソリンタンクの容量を設定し、満タンにします。そして、スピードを0kmにします。

○ プログラム

 次のように記述を追加してください。

Car.vb

  1. Public Class Car
  2.  'フィールド==========
  3.  'Public m_speed As Integer     'スピード情報
  4.  Private m_speed As Integer     'スピード情報(修正)
  5.  'Public m_gas As Double      'ガソリン情報
  6.  Private m_gas As Double     'ガソリン情報(修正)
  7.  'コンストラクタ===========
  8.  Public Sub New()
  9.   Me.New(20)
  10.  End Sub
  11.  Public Sub New(gas As Double)
  12.   Me.m_speed = 0
  13.   Me.m_gas = gas
  14.  End Sub
  15.  'メソッド==========
  16.  '加速させるメソッド
  17.  Public Sub speedUp(ByVal sp As Integer)
  18.   Me.m_speed += sp
  19.   Me.m_gas -= sp / 10 '加速するとガソリンが減る
  20.  End Sub
  21.  '減速させるメソッド
  22.  Public Sub speedDown(ByVal sp As Integer)
  23.   Me.m_speed -= sp '減速した場合はガソリンは消費しない
  24.   If Me.m_speed < 0 Then
  25.    Me.m_speed = 0
  26.   End If
  27.  End Sub
  28.  '初期化を行うメソッド
  29.  'Public Sub init(ByVal gas As Double)
  30.  ' Me.m_speed = 0
  31.  ' Me.m_gas = gas
  32.  'End Sub
  33.  'スピードを取得する
  34.  Public Function getSpeed() As Integer
  35.   Return Me.m_speed
  36.  End Function
  37.  'ガソリン残量を取得する
  38.  Public Function getGas() As Double
  39.   Return Me.m_gas
  40.  End Function
  41. End Class

○ プログラム

 Carクラスで、初期化を行うメソッドが不要になりましたので、コメントアウト(削除)します。インスタンスを生成する記述も変更しましょう。

Form1.vb

  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.  'インスタンス生成
  3.  'Me.obj = New Car()
  4.  Me.obj = New Car(30)
  5.  'フィールド変数初期化
  6.  'Me.obj.m_speed = 0/span>
  7.  'Me.obj.m_gas = 20
  8.  'obj.Init(20)
  9. End Sub

 コンストラクタの中でも引数を持たないコンストラクタは「デフォルトコンストラクタ」と呼びます。

 前節までは、コンストラクタを記述しませんでした。その場合は、暗黙のうちに引数なし・処理なしのデフォルトコンストラクタが仮定されて、インスタンスが生成されます。もし、引数を持つコンストラクタが1つでも定義されている場合は、デフォルトコンストラクタは仮定されません。デフォルトコンストラクタを使用したい場合は明示的に定義しなくてはなりません。

 なお、メソッドを同じ名前で定義することができます。これを、オーバーロードと呼びます。コンストラクタも「New」という名前のプロシージャをいくつも定義できます。しかし、これには条件があります。引数の構成(シグネチャ)を異なったものにすることです。

 オーバーロードされているメソッドは呼び出しをするときに引数で判別します。引数が無ければ、引数を受け取らないプロシージャ、引数がInteger型1つ渡すと、引数Integer型1つ受け取るプロシージャが呼び出されます。

 次の要件を考慮して、判別します。

前へ   次へ