構造体変数のメンバ変数となった他の構造体の構造体変数をもっと簡単に初期化してみましょう

てんC

「前のエピソードのプログラムで構造体変数player1StatusDataのメンバ変数


player1StatusData.HP

player1StatusData.MP

player1StatusData.AP

player1StatusData.TP

および


構造体変数player1StatusDataのメンバ変数となった

構造体Allcleartimequest型の

構造体変数Allcleartimequest1のメンバ変数

player1StatusData. Allcleartimequest1.cleartimequest1

player1StatusData. Allcleartimequest1.cleartimequest2

player1StatusData. Allcleartimequest1.cleartimequest3

次のように数値データを代入して初期化しました。


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData. Allcleartimequest1.cleartimequest1=150;

player1StatusData. Allcleartimequest1.cleartimequest2=7800;

player1StatusData. Allcleartimequest1.cleartimequest3=123800;


このようにメンバ変数に数値データを代入して初期化する方法は


記述が長いとおもわれます


🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲

前のエピソードのプログラムはこちら

↓ ↓ ↓

#include <iostream>


using namespace std;

typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}PlayerStatusData;


/*ここの部分で

struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行うと同時に

構造体名を struct PlayerStatusData からPlayerStatusDataに変更しました。

そして

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;を


構造体変数宣言

Allcleartimequest Allcleartimequest1;

にかきかえました。

構造体Allcleartimequestと

その構造体変数Allcleartimequest1で表しました*/


int main() {


PlayerStatusData player1StatusData;

/* player1のステータスデータを管理するために

player1StatusDataの構造体変数宣言をおこないました。

*/


player1StatusData.HP = 10;

player1StatusData.MP = 8;

player1StatusData.AP = 22;

player1StatusData.TP = 18;

player1StatusData.Allcleartimequest1.cleartimequest1 = 150;

player1StatusData.Allcleartimequest1.cleartimequest2 = 7800;

player1StatusData.Allcleartimequest1.cleartimequest3 = 123800;

/*ここから大分長いコメント文になります

👇

player1のステータスデータを


構造体変数player1StatusDataのメンバ変数

player1StatusData.HP

player1StatusData.MP

player1StatusData.AP

player1StatusData.TP

player1StatusData. Allcleartimequest1.cleartimequest1

player1StatusData. Allcleartimequest1.cleartimequest2

player1StatusData. Allcleartimequest1.cleartimequest3

に代入し初期化しました。


構造体変数Allcleartimequest1を


構造体変数player1StatusDataのメンバ変数として


格納することにより


player1のクエストクリア時間の数値データを


player1StatusDataのメンバ変数である


player1StatusData.cleartimequest1

player1StatusData.cleartimequest2

player1StatusData.cleartimequest3に


player1StatusData.cleartimequest1=150;

player1StatusData.cleartimequest2=7800;

player1StatusData.cleartimequest3=123800;


と代入していた方法から


player1のクエストクリア時間の数値データを


構造体変数 player1StatusDataのメンバ変数である

構造体変数Allcleartimequest1のメンバ変数となった


Allcleartimequest1.cleartimequest1

Allcleartimequest1.cleartimequest2

Allcleartimequest1.cleartimequest3


に代入する方法である


player1StatusData.Allcleartimequest1.cleartimequest1=150;

player1StatusData.Allcleartimequest1.cleartimequest2=7800;

player1StatusData.Allcleartimequest1.cleartimequest3=123800;


に変化しています


このとき.(ドット演算子)が2回もちいられていますね


コメント文 終わり*/



cout << "player1" << "\n";

cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest1 << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest2 << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest3 << "\n";


/* player1のステータスデータを表示しました。*/


return 0;

}

ビルド実行結果

10

8

22

18

150

7800

123800

🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲


てんC


「この構造体変数 player1StatusDataの初期化方法

player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData. Allcleartimequest1.cleartimequest1=150;

player1StatusData. Allcleartimequest1.cleartimequest2=7800;

player1StatusData. Allcleartimequest1.cleartimequest3=123800;

を もっと簡単に


Player player1StatusData={10,8,22,18,{150,7800,123800}};とかきかえることができます。

↑  ↑  ↑

(この1文でplayer1StatusDataの構造体変数宣言を行い


player1StatusDataを構造体Playerの構造体変数にしたと同時に


数値データを構造体変数player1StatusDataに代入し


初期化もおこなっています。)


{10,8,22,18,{150,7800,123800}}内の


数値データ

10

8

22

18


構造体宣言 PlayerStatusData

⇩  ⇩  ⇩

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}Player;


内で表記された変数宣言


int HP;

int MP;

int AP;

int TP;

の順に上から


player1StatusDataのメンバ変数に


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;


と代入されていきます。



そして残りの


{150,7800,123800}内の


数値データ 

150

7800

123800は


構造体宣言 Allcleartimequest

⇩  ⇩  ⇩

typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest ;


で表記された


int cleartimequest1;

int cleartimequest2;

int cleartimequest3;


の順に上から


構造体変数player1StatusDataのメンバ変数Allcleartimequest1

のメンバ変数

player1StatusData.Allcleartimequest1.cleartimequest1

player1StatusData.Allcleartimequest1.cleartimequest2

player1StatusData.Allcleartimequest1.cleartimequest3

player1StatusData.Allcleartimequest1.cleartimequest1=150;

player1StatusData.Allcleartimequest1.cleartimequest2=7800;

player1StatusData.Allcleartimequest1.cleartimequest3=123800;


と代入されていきます。


今のプログラムはシンプルにまとめると


以下のようにかきかえられます。


🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲

#include <iostream>


using namespace std;

typedef struct Allcleartimequest

{

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}Allcleartimequest;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

Allcleartimequest Allcleartimequest1;

}PlayerStatusData;



int main() {


PlayerStatusData player1StatusData = { 10,8,22,18,{ 150,7800,123800 } };

/*ここの部分がすっきりとしました🌞*/




cout << "player1" << "\n";

cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest1 << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest2 << "\n";

cout << player1StatusData.Allcleartimequest1.cleartimequest3 << "\n";


/* player1のステータスデータを表示しました。*/


return 0;

}


ビルド実行結果

player1

10

8

22

18

150

7800

123800

🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲🌳🌳🌲



ソーラー 「ははあ


構造体変数player1StatusDataの初期化で


PlayerStatusData player1StatusData={10,8,22,18,{150,7800,123800}};

の{}内でさらに{}に囲まれた


{150,7800,123800}のように


構造体変数の初期化で


{}内でさらに{}に囲まれた

数値データがあるときは


構造体に別の構造体変数がメンバ変数として格納されているんだね。」


てんC「構造体変数の初期化は


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData.Allcleartimequest1.cleartimequest1=150;

player1StatusData.Allcleartimequest1.cleartimequest2=7800;

player1StatusData.Allcleartimequest1.cleartimequest3=123800;

のように


1つずつデータを構造体変数player1StatusDataのメンバ変数に格納するより


このように初期化した方が


簡単ですね。」


ソーラー「構造体は仕組みがなんか面白いな。」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る