C++でゲーム制作をしていると、classとstructのどちらを使うべきなのか迷う場面があります。どちらもデータと関数をまとめて扱えるため、似たように見えますが、設計思想や使われる場面には違いがあります。
この記事では、C++におけるclassとstructの基本的な違いから、ゲーム開発でどのように使い分けると分かりやすいコードになるのかを具体例を交えて解説します。
C++のclassとstructは基本的な機能はほぼ同じ
C++ではclassとstructはどちらもユーザー定義型を作成するための仕組みです。メンバ変数を持つことも、メンバ関数を持つことも、継承することもできます。
例えば、以下のような処理はclassでもstructでも同じように記述できます。
- プレイヤーの情報を管理する
- 敵キャラクターの状態を管理する
- アイテムのデータを保持する
- ゲーム内の処理をまとめる
つまり、機能面だけを見ると大きな差はありません。重要なのは、チームや自分自身がコードを読みやすく管理しやすくするための使い分けです。
classとstructの大きな違いはアクセス指定の初期値
C++でのclassとstructの最も大きな違いは、メンバのアクセス指定の初期値です。
structではメンバがpublicになります。一方、classではprivateになります。
| 種類 | 初期アクセス | 一般的な用途 |
|---|---|---|
| struct | public | 単純なデータ保持 |
| class | private | データと処理をまとめたオブジェクト |
例えば、位置情報のような単純なデータならstructが向いています。
例としてゲーム内の座標を管理する場合、以下のような設計になります。
struct Vector2{float x;float y;};
xやyを直接変更するだけなので、データ構造として扱いやすいstructが適しています。
ゲーム制作ではデータ管理にstruct、オブジェクト管理にclassが向いている
ゲーム開発では、データそのものを表すものにはstructを使い、状態や動作を持つものにはclassを使うという考え方が分かりやすいです。
例えば、キャラクターのステータス情報だけならstructが適しています。
struct CharacterStatus{int hp;int attack;int defense;};
このようなデータは複雑な処理を持たず、値をまとめて管理する目的だからです。
一方、プレイヤーキャラクターのように移動、攻撃、ダメージ処理などの動作を持つものはclass向きです。
class Player{private:int hp;public:void Attack();void Move();};
Playerという存在は単なるデータではなく、自分自身の状態を管理しながら動作するオブジェクトなのでclassで表現すると自然になります。
ゲーム開発でstructを使うことが多い場面
structは、値の集合や設定情報などを扱う場合に便利です。
ゲーム制作では以下のような場面でよく利用されます。
- 座標や方向ベクトル
- 色やサイズ情報
- 武器の性能データ
- ステージ設定
- 敵の初期パラメータ
例えば武器データの場合、「攻撃力」「射程」「弾数」などをまとめるだけならstructで十分です。
ただし、武器が自動的に弾を発射する、耐久値を減らすなどの処理を持つ場合はclassとして設計したほうが管理しやすくなります。
ゲーム開発でclassを使うことが多い場面
classは、状態を持ち、その状態を操作する処理を内部にまとめたい場合に向いています。
ゲームでは以下のようなものがclassになりやすいです。
- プレイヤー
- 敵キャラクター
- アイテム管理システム
- ゲームシーン管理
- 物理オブジェクト
例えば敵キャラクターなら、HPや位置だけではなく、「攻撃する」「移動する」「死亡する」といった行動も管理します。
このような場合、外部から直接データを書き換えるより、class内部の関数を通して操作することでバグを減らせます。
迷った場合の判断基準
classとstructの選択で迷った場合は、「これはデータなのか、それとも動作する存在なのか」を考えると判断しやすくなります。
以下のような基準で考えると整理できます。
- データをまとめたいだけならstruct
- 状態と処理を一緒に管理したいならclass
- 外部から自由に変更されても問題ないならstruct
- データを保護したいならclass
ただし、C++では技術的にはどちらでも実装できます。最終的にはプロジェクト全体で統一された分かりやすい設計にすることが重要です。
まとめ|C++ゲーム制作では役割でclassとstructを使い分ける
C++のclassとstructには大きな機能差はありませんが、一般的にはstructはデータを表現するため、classはデータと処理を持つオブジェクトを表現するために使われます。
ゲーム制作では、座標や設定値などの単純な情報はstruct、プレイヤーや敵など動きを持つ存在はclassにするとコードが整理しやすくなります。
最初から完璧な設計を目指す必要はありません。作りながら「このデータは外部から自由に変更してよいのか」「処理も一緒に管理したいのか」を考えることで、自然と適切な使い分けができるようになります。


コメント