クラス定義

世界に一つだけの型


今までは intdouble のような言語に用意されている型でプログラムを書いてきた。

一応そういう型だけでもプログラミングできるけど、同じような変数の組み合わせに同じような処理書くことが多くなってくる。

int player1_x, player1_y;
int player2_x, player2_y;
if (player1_x < player2_x && player1_y < player2_y) { /* ... */ }

クラス を定義することで、変数のまとまりとそれに対する処理 をこんな感じで書ける。

struct Point {
  int x, y;
  bool is_upper_left(Point const &p) const {
    return x < p.x && y < p.y;
  }
};

クラスの定義構文はこんな感じ。

class クラス名 {
  メンバ1;
  メンバ2;
  // :
  // :
};
// または、
struct クラス名 {
  メンバ1;
  メンバ2;
  // :
  // :
};

classstruct ではメンバの扱いが少し異なる。 詳しくは次の次のページで解説するよ。

クラスを作る基準

ただ、何でもかんでもクラスにすればいいってわけじゃない。

プログラムでやっている 処理を責務ごとに分ける という、少し特殊な考え方が必要になる。

プログラムでよく登場する概念

ゲームを例にすると、キャラクターの座標、コントロール、アニメーションとかがよく登場する。

そういうものを責務ごとで予めクラスに分けておくと、機能を追加/変更するときに分かりやすくなる。

変更される頻度に差がある部分

同じくゲームを例にすると、ゲームのルールやロジックの処理よりも、画面やキャラクターデータの方が変化しやすい。

こういう場合、ロジックとキャラクターデータ、ロジックと画面を一緒のクラスにすると複数の役割が混ざっていることになる。こいつらはそれぞれ別のクラスにしておかないといけない。

実際に C++ で書くときは 抽象クラス を使うことになるけど、それは 5 ページ先のお話。