「コンストラクタ、デストラクタ」の編集履歴(バックアップ)一覧はこちら

コンストラクタ、デストラクタ」(2010/06/06 (日) 15:20:51) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

前回は簡単なクラスをつくってみますた。ファイルを読み込むだけのABFILEクラスです。 でもおこんなものなーんの役にもたちゃしねえわけです。 さて今回お話するのはコンストラクタとデストラクタです。 コンストラクタを笑うものはデストラクタに泣くという格言があるくらい重要なパートです。 こいつを理解するとオブジェクト指向なんて小難しいことは知らなくて構いません。 そもそもABでオブジェクト指向しようなんてのが土台無理な話なのです。 ABは大規模いや中規模開発すら大変なクソ言語です。 正直ファイルの分割なんてあって無いようなものだしスコープに対する静的オブジェクトも作れないし。 他の言語でつくられたモジュールとの連携も多大な制約を受け、 もしオブジェクト指向を勉強したいなら他の言語でやってくれ。と声を大にして言いたい。 ABなんぞホビーで使う言語であり、それに特化しているのだから。 コンストラクタ(構築子、コントラ)はオブジェクトのインスタンスが生成されたときに呼ばれる関数です。 デストラクタ(消滅子、消去子、デコトラ)は、オブジェクトが破棄されるときに呼ばれる関数です。 ここで?マークだらけになった人は見込みがあります。 もしすんなり理解できた人はABプログラマとしての素質はありません。すぐJAVAに移行してください。 クラスはあくまで型です。オブジェクトはその型の物(対象)です。インスタンスと言うのは実体です。 Dim f As ABFILE'オブジェクトfはABFILEという型ですよ。また実体を持っていますよ Dim p As *ABFILE'オブジェクトpはABFILEという型を指しますよ。でも実体は用意されていません。 p = New ABFILE'pはABFILE型の実体を指しますよ。 DLLを作ったことのある人はDllMainという関数を知っているでしょう。 そのなかにDLL_PROCESS_ATTACHという条件があります。まさにこれこそがコンストラクタです。 デストラクタはその逆でDLL_PROCESS_DETACHされたときのことです。 #asciiart(blockquote){ Class ABFILE Private hF As HANDLE Public 'コンストラクタ! Sub ABFILE() '何もしない、することがない End Sub 'デストラクタ Sub ~ABFILE() mClose()'閉じ忘れ対策 End Sub Function mOpen(filename As String) As Long If hF Then mClose() hF = CreateFile(StrPtr(filename), GENERIC_READ, 0, ByVal 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If hF = INVALID_HANDLE_VALUE Then hF = NULL End If mOpen = hF End Function Function mRead(buffer As VoidPtr, length As DWord) As DWord If hF = NULL Then Exit Function ReadFile(hF, buffer, length, VarPtr(mRead), ByVal 0) SetByte(buffer As *Byte + mRead, 0) End Function Function mClose() As Long If hF Then CloseHandle(hF) hF = NULL Print "ファイル閉じたよ" End Function End Class #N88BASIC Dim f As ABFILE Dim buf[555] As Byte f.mOpen("555.abp") While f.mRead(buf, 555) Print MakeStr(buf); Wend } 前回のプログにコンストラクタとデストラクタを書いてみました。 コンストラクタは何もしません。もし書かなくてもこのように何もしないコンストラクタは暗黙的に定義されます。 デストラクタも何もしないものが暗黙的に宣言されます。 またコンストラクタやデストラクタは返り血が無いのでエラーに成っても適切に処理できるように工夫しなければいけません。

表示オプション

横に並べて表示:
変化行の前後のみ表示: