複数の変数を内部に持つ新しい型を作ることができます。これは、たとえば RPG を作る際に1キャラ分のデータをひとつの変数にまとめたい場合に有効です。このような意図で作られた新しい型を構造体と呼びます。
構造体はひとつの名前で複数のデータを管理するところが配列と似ています。
しかし、配列はひとつの名前と番号で複数のデータを管理していたのに対して、構造体はひとつの名前とその名前に関連付いている別の名前で複数のデータを管理する部分が異なります。
// 配列で3つのデータを管理する printf("First is %d\n", numbers[0]); printf("Second is %d\n", numbers[1]); printf("Third is %d\n", numbers[2]); // 構造体で3つのデータを管理する printf("First is %d\n", numbers.first); printf("Second is %d\n", numbers.second); printf("Third is %d\n", numbers.third);
構造体を使うためには、まず構造体を定義する必要があります。
構造体は、はじめてその構造体の変数を宣言するより前(ソースコードから見ると上)に定義する必要があります。
構造体は次のように定義します。このとき、カッコの中の変数をメンバ変数と呼びます。
struct Player { char name[50]; int HP; int MP; int STR; int DEF; int AGI; };
これは RPG の1キャラ分のデータをイメージしたものです。
実際にこの変数を使うためには、通常の変数と同様に宣言が必要になります。
struct Player player;
構造体へアクセスするためには通常の変数と同様に、宣言した時につけた名前を指定するだけですが、構造体の中の変数(メンバ変数)へアクセスするためには、構造体の変数名の後ろにドットをひとつおいて、中の変数名を指定する必要があります。
// プレイヤーの名前へアクセス player.name; // プレイヤーの体力へアクセス player.HP; // プレイヤーの攻撃力へアクセス player.STR;
構造体の中の変数は通常の変数と同じようにデータを計算や記憶することができます。
// 宣言 struct Player player; // キャラクターの初期情報をセット player.name = "Byerkut"; player.HP = 100; player.MP = 50; player.STR = 10; player.DEF = 5; player.AGI = 1; // ダメージを食らった player.HP = player.HP - 10; // MP を消費して魔法を使い、攻撃力を上昇させた player.MP = player.MP - 8; player.STR = player.STR * 1.1;
構造体は変数ですので他の変数へコピーすることが可能です。ただし、数値型ではないため計算はできません。
struct Player player; struct Player beforeBattle; // 戦闘前のデータを保存しておく beforeBattle = player;
構造体の中の変数(メンバ変数)は C++ の基本型だけではなく、別の構造体を指定することもできます。
// プレイヤー struct Player { char name[50]; int HP; int MP; int STR; int DEF; int AGI; }; // パーティー struct Party { // リーダー struct Player leader; // サブリーダー struct Player subLeader; // メンバー1 struct Player member1; // メンバー2 struct Player member2; // メンバー3 struct Player member3; }
Party 構造体の中の変数(メンバ変数)として Player 構造体を使っていますので、 Player 構造体は Party 構造体より前に定義する必要があります。
Contributions