| 0からのゲームプログラミング > コンストラクタ・デストラクタ |
| Back Next |
| 更新日 2003.09.28 |
| コンストラクタ・デストラクタ |
| クラスを使うことのメリットの一つに、コンストラクタ(constructor)とデストラクタ(destructor)があります。メモリにクラスの実体(インスタンス, instance)が作成されたとき、自動的に一度だけ呼ばれるのがコンストラクタで、その実体がメモリから破棄されたときに自動的に一度だけ呼ばれるのがデストラクタです。 コンストラクタは、クラスと同じ名前を持ち、戻り値がありません。デストラクタは、クラス名の前にチルダ(~)を付けた名前を持ち、引数・戻り値がありません。チルダ(~)は Shift キーを押しながらキーボードの右上の方の(^)のキーを押すと入力出来ます。 サンプルコード Main.cpp |
|
サンプルコード Hero.cpp |
|
サンプルコード Hero.h |
|
実行結果 |
|
デバッグしてコードを追えば、どのタイミングでコンストラクタとデストラクタが呼ばれるかが分かります。 最初の内は、クラスを書くのが面倒に感じるかも知れません。書き方を覚えていたとしても、一々同じようなコードを、クラスを追加する毎に書くのは大変です。そこで、以下のようなスケルトンコードを作成して保存しておくと便利です。新しいクラスを追加する際には、Hero と __HERO_H__ の文字だけを置換すれば、簡単に作成出来ます。 スケルトンコード Hero.cpp |
|
スケルトンコード Hero.h |
|
ヘッダファイルには、#から始まる3行を追加しています。意味は、もし __HERO_H__ が定義されていなければ、__HERO_H__ を定義して、#endif まで処理することを意味します。つまり、ヘッダファイルに書かれたソースを2重にインクルードしない為の細工になります。試しに、最初の Main.cpp のファイルで、 #include "Hero.h" #include "Hero.h" と、2重にインクルードしてみて、違いを確認してみて下さい。この細工をしていなければ、コンパイルエラーが起こります。最初の例では、特にこの細工をする必要はありませんが、プログラムが複雑になってくると、どうしても2重にインクルードしてしまうときがある為に、この細工を行います。Visual C++ を使っているなら、この3行の代わりに、 #pragra once と書けば、このことを自動的にやってくれます。 そろそろゲーム作成の話題に移ろうかと思っていますが、上のスケルトンコードには、コンストラクタとデストラクタの他に、Move 関数 <動作…計算のみを行う> と Draw 関数 <描画…画面に表示させる処理のみを行う> を追加しています。なぜ、このように分けているかということは、そのときになったら説明することにします。 |
| 【スポンサード リンク】 |
| Back Next |
| 0からのゲームプログラミング > コンストラクタ・デストラクタ |