久々の書き。C++のクラスについてです。階級じゃないです。
とりあえず構造体との比較をメインにするので、ちょっとだけ知識がいるかもしれません。
クラスの一番最初にかいてあるだろう利点の「関数をメンバとして含めることができる」を使ってみます。
ここではモグラ叩きっぽいゲームをつくるとしましょう。
モグラの動作のみを扱うクラスを
class MOGURA{
int x;
int y; // モグラの出現位置
int appr; // モグラの出現タイミング
int dappr; // モグラの隠れるタイミング
int stat; // モグラの状態
int size; // モグラの大きさ
public:
MOGURA(); // モグラの初期設定
~MOGURA(); // モグラの後処理
void set(int pos_x, int pos_y, int appear, int span);
// モグラの動作設定
void attack(int pos_x, int pos_y);
// 当たり判定&当たり動作(引数はクリック座標)
void tick(int time);
// モグラに現在の時間を知らせる
void draw(); // モグラの描画
};(メンバ関数のコードは省略)
とかやって作っておきます。
以下、構造体との比較。
(比較にはsetとかset_moguraとかの関数使ってますが、これは引数から出現位置、出現時間等を代入するための関数です。)
構造体と関数を用いると関数は引数に構造体への参照を取らないといけないので、コードの見た目としては、「関数によって構造体を操作する」って感じになるとおもいます。
typedef struct{
int x;
int y; // モグラの出現位置
int appr; // モグラの出現タイミング
int dappr; // モグラの隠れるタイミング
int stat; // モグラの状態
int size; // モグラの大きさ
}MOGURA;
void set_mogura(MOGURA* m, int pos_x, int pos_y, int appear, int span);
// モグラの動作設定
//--------------------------------------------------------------//
MOGURA* m = (MOGURA*)malloc(sizeof(MOGURA));
set_mogura(m, x, y, appear, span);こんな感じ?
それに対して、クラスを用いると「その変数(オブジェクト)に含まれる機能を使う」といった感じの書き方になります。
// クラス宣言は上記参照
//--------------------------------------------------------------//
MOGURA* m = new MOGURA; // MOGURAのオブジェクト作成
m->set(x, y, appear, span);
この書き方のほうが上よりわかりやすいと思いません?(変数名のせいかもしれないけど)
また、クラスにはコンストラクタ・デストラクタといった機能が付いているので、書き方がさらに楽になったりします。
それはまた次回以降に。
※学生の浅い知識で書いています。問題点等ありましたら、コメントで指摘してもらえるとうれしいです。