コンストラクタの話をする前に、クラスを作成する練習をしましょう。
今回作成するクラスは敵キャラを生成するクラスです。
前回作成したCalculationクラスは削除して構いません。(右クリック→削除(V)→削除(D))
ソリューション エクスプローラーを右クリックし、追加→新しい項目 を選んで下さい。
146


今回はEnemyCharacter.hを作成します。なお、.hを付けなくても拡張子は自動的に.hになります。
152


敵キャラなので、名前とステータスを作成しましょうか。


さてこの時点でお気づきの方もいるかもしれませんが、
この敵キャラクラスから実際の敵キャラを生成するとどうなるでしょうか?

153


そうです。全く同じキャラが生成されるのです。しかも名前もHPもありません。
では、Cスタイルで初期化しておきましょう。


……ちょっと待って下さい。これでは魔王ラストボスが2体生成されるだけです。
154


なんというか、全然柔軟じゃないですよね。
宣言したオブジェクト毎に違う値で初期化できないものでしょうか……?

その機能を叶えてくれるのがコンストラクタ関数です。
コンストラクタ関数は、オブジェクトを生成する際に1度だけ自動実行される関数です。

コンストラクタ関数を作成するには、クラス名と同じ関数を宣言、定義します。
この際戻り値を持たせることはできません。そもそも必要ありません。


strcpyは文字列定数を文字配列へ代入してくれる関数です。cstringをインクルードして使います。また、仮引数に=1を付けていますが、これはデフォルト仮引数と言い、引数が指定されなかった時にhの値が1となることを意味します。


オブジェクトを生成する時に、コンストラクタ関数へ渡す引数も宣言します。
EnemyCharacter Enemy1("魔王ラストボス", 5000);
EnemyCharacter Enemy2("その辺の魔物", 20);

下記のサンプルコードを実行し、各オブジェクトが違うデータを保持していることを確認して下さい。

155


クラスには2種類の使い方があります。
単独のオブジェクトを生成し、関数を動かすのが主である管理クラスと
複数のオブジェクトを生成し、データを保持するのが主であるデータクラスです。