コンストラクタによるオブジェクトの初期化
コンストラクタは、クラスからインスタンス生成をする際にフィールド変数に値を設定するなどの初期設定を行う機能です。インスタンス生成を行う際に呼び出される特別なメソッドを記述します。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
コンソール アプリケーション |
プロジェクト名 |
ConstractorTest |
サンプルダウンロード
○ 作成の準備
Carクラスにコンストラクタの記述を追加しましょう。「CapsuleTest」をコピーしてプロジェクトを作成してください。今回は、インスタンス生成時にガソリンタンクの容量を設定し、満タンにします。そして、スピードを0kmにします。
○ プログラム
次のように記述を追加してください。
Car.vb
- Public Class Car
- 'フィールド==========
- 'Public m_speed As Integer 'スピード情報
- Private m_speed As Integer 'スピード情報(修正)
- 'Public m_gas As Double 'ガソリン情報
- Private m_gas As Double 'ガソリン情報(修正)
- 'コンストラクタ===========
- Public Sub New()
- Me.New(20)
- End Sub
- Public Sub New(gas As Double)
- Me.m_speed = 0
- Me.m_gas = gas
- End Sub
- 'メソッド==========
- '加速させるメソッド
- Public Sub speedUp(ByVal sp As Integer)
- Me.m_speed += sp
- Me.m_gas -= sp / 10 '加速するとガソリンが減る
- End Sub
- '減速させるメソッド
- Public Sub speedDown(ByVal sp As Integer)
- Me.m_speed -= sp '減速した場合はガソリンは消費しない
- If Me.m_speed < 0 Then
- Me.m_speed = 0
- End If
- End Sub
- '初期化を行うメソッド
- 'Public Sub init(ByVal gas As Double)
- ' Me.m_speed = 0
- ' Me.m_gas = gas
- 'End Sub
- 'スピードを取得する
- Public Function getSpeed() As Integer
- Return Me.m_speed
- End Function
- 'ガソリン残量を取得する
- Public Function getGas() As Double
- Return Me.m_gas
- End Function
- End Class
○ プログラム
Carクラスで、初期化を行うメソッドが不要になりましたので、コメントアウト(削除)します。インスタンスを生成する記述も変更しましょう。
Form1.vb
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'インスタンス生成
- 'Me.obj = New Car()
- Me.obj = New Car(30)
- 'フィールド変数初期化
- 'Me.obj.m_speed = 0/span>
- 'Me.obj.m_gas = 20
- 'obj.Init(20)
- End Sub
コンストラクタの中でも引数を持たないコンストラクタは「デフォルトコンストラクタ」と呼びます。
前節までは、コンストラクタを記述しませんでした。その場合は、暗黙のうちに引数なし・処理なしのデフォルトコンストラクタが仮定されて、インスタンスが生成されます。もし、引数を持つコンストラクタが1つでも定義されている場合は、デフォルトコンストラクタは仮定されません。デフォルトコンストラクタを使用したい場合は明示的に定義しなくてはなりません。
なお、メソッドを同じ名前で定義することができます。これを、オーバーロードと呼びます。コンストラクタも「New」という名前のプロシージャをいくつも定義できます。しかし、これには条件があります。引数の構成(シグネチャ)を異なったものにすることです。
オーバーロードされているメソッドは呼び出しをするときに引数で判別します。引数が無ければ、引数を受け取らないプロシージャ、引数がInteger型1つ渡すと、引数Integer型1つ受け取るプロシージャが呼び出されます。
次の要件を考慮して、判別します。
前へ 次へ