構造体変数のメンバ変数となった他の構造体の構造体変数をもっと簡単に初期化してみましょう
てん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のメンバ変数に格納するより
このように初期化した方が
簡単ですね。」
ソーラー「構造体は仕組みがなんか面白いな。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます