クラスまみれのゲームプログラミング入門

1:クラスを家に見立てる

 第1回目は、「これを使わずC++というなかれ」と言っても過言ではない「クラス」の基本について解説します。C++のクラスは端的に言えば「構造体にアクセス制限と関数がプラスされた」ようなものです。クラスを「家」に見立てると、わかりやすいかもしれません。

 まずはこちらのコードをご覧ください。

1.cpp
class CEnemy
{
private:
    int hitpoint;
    float x, y;
public:
    void SetPosition(float x, float y);
    void SetHitpoint(int p);
};

void Cenemy::SetPosition(float pos_x, float pos_y)
{
    this->x = pos_x;
    this->y = pos_y;
}

void Cenemy::SetHitpoint(int val)
{
    this->p = val;
}

 まず、1行目にあるclassで、ここから先の中括弧({})でくくられた部分がクラスの内容であることを宣言します。ちなみに中括弧で閉じるときは「;」の記号を忘れずに。JavaやC#でのコーディングになれてしまうとついつい記入漏れを起こしがちです。

 3行目にあるprivateは、ここから先にある変数・関数はプライベートな情報であることを表します。プライベートですから、家の中にいる人しか中身を知ることはできません。例えば、13~14行目ではprivate属性であるxとyに値が直接代入されていますが、これは、CEnemy家の内にいる関数「SetPosition」が手に取っているから可能なのであり、

2.cpp
void main()
{
	CEnemy enemy;
	enemy.x = 150;
}

のように、「main関数」という、家の外にいる見ず知らずの人が、enemy家の「x」を触ろうとしても、「アクセスできません」と断られてしまいます。簡単に外からいじられてほしくない変数や関数はprivate属性にしてしまいましょう。

 一方、一番最初に紹介したコードの6行目にあるpublicは、ここから先の変数・関数が、パブリック、つまり「みんなに触ってもらってもかまわない」内容であることを宣言します。「1.cpp」のばあいは、「SetPosition」と「SetHitpoint」がそれにあたり、これらは家の外の人でも自由に接触できるので、

3.cpp
void main()
{
	CEnemy enemy;
	enemy.SetHitpoint(150);
}

 このように、SetHitpointに150の値をお願いすれば、SetHitpointはenemy家の住人なので、代わりに17行目で記述されているSetHitpoint関数内においてプライベートな「hitpoint」変数へと代入してくれるというわけです。この方法を使えば、値の設定を関数により明確化できるので、妙なところで変数を代入してしまい、結果プログラムが暴走するという危険を防ぐことができます。