🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラスGameCharacterに火を吐くメンバ関数を設定せず新たに別にクラスDragonを創設しそこに火を吐くメンバ関数を設定してみたいと思います
クラスGameCharacterに火を吐くメンバ関数を設定せず新たに別にクラスDragonを創設しそこに火を吐くメンバ関数を設定してみたいと思います
つづき・・・
てんC「なるほど
クラスGameCharacterに
火を吐くという
属性を設定してしまうと
ドラゴン(Dragon)型のキャラクターだけでなく
人間(Human)型のキャラクター
妖精(Fairy)型のキャラクター
いえ もっと言えば
すべてのタイプのキャラクターも
火🔥を吐いて
火を吐かれた側のキャラクターのHPを回復させる
ファイヤーフレア
を使うことができるようになってしまうのですね
」
solarplexuss「もう 熱いぃ🍜」
そのことを示すプログラムはこちらです
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
void useFireRecovery(GameCharacter& a);
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
void GameCharacter::useFireRecovery(GameCharacter& a){
cout << name << "は灼熱のフレアを"<<a.name<<"に吐いた" << "\n";
cout << a.name << "は灼熱のフレアを受け燃え上がった!"<<"\n";
a.HP += 10;
cout << a.name << "の体力は10回復した" << "\n";
}
int main() {
GameCharacter Lyliane;
Lyliane.name = "リリアーネ";
Lyliane.HP = 10;
Lyliane.MP = 8;
GameCharacter Pokky;
Pokky.name = "ポッキー";
Pokky.HP = 15;
Pokky.MP = 5;
Lyliane.statusDataDisplay();
Pokky.statusDataDisplay();
Lyliane.useFireRecovery(Pokky);
Lyliane.statusDataDisplay();
Pokky.statusDataDisplay();
return 0;
}
プログラムの実行結果
リリアーネ
HP 10
MP 8
ポッキー
HP 15
MP 5
リリアーネは灼熱のフレアをポッキーに吐いた!//👈リリアーネが🔥を吐いています
ポッキーは灼熱のフレアを受け燃え上がった!
ポッキーの体力は10回復した
リリアーネ
HP 10
MP 8
ポッキー
HP 25//🌞HPが回復しています
MP 5
てんC「このプログラムのように
クラスGameCharacterに
キャラクターが火を吐くことのできる
クラスGameCharacterのメンバ関数
useFireRecovery(GameCharacter& a)を設定しまうと
ドラゴン(Dragon)型のキャラクターだけでなく
人間(Human)型のキャラクター
妖精(Fairy)型のキャラクター
いえ もっと言えば
すべてのタイプのキャラクターも
火🔥を吐くことができるようになってしまうのですね」
ソーラー「そうなんです」
マックス「じゃあ、どうやったら
ドラゴン(Dragon)型のキャラクターだけが
火を吐くようにすることができるんだ?
つまり
火を吐いて
火を吐かれた側のキャラクターのHPが回復できるようにすることができるんだ?」
ソーラー「そのためには
クラスGameCharacterの他に
クラスDragonを創設し
そのクラスDragonだけに
クラスDragonのメンバ関数
useFireRecovery(GameCharacter& a)を設定します
そうすれば
クラスDragon型のオブジェクト宣言によって生成された
クラスDragon型のオブジェクトだけが
クラスDragonのメンバ関数
useFireRecovery(GameCharacter& a)を使用することができ
火🔥を吐くことができるようになります
クラスGameCharacterには
useFireRecovery(GameCharacter& a)が
設定されていないので
クラスGameCharacter型のオブジェクト宣言によって生成された
クラスGameCharacter型のオブジェクトでは
useFireRecovery(GameCharacter& a)
を使用することはできません
そこで
クラスDragonのメンバ関数
useFireRecovery(GameCharacter& a)の定義は
👇
void Dragon::useFireRecovery(GameCharacter& a){
cout << name << "は灼熱のフレアを"<<a.name<<"に吐いた !" << "\n";
cout << a.name << "は灼熱のフレアを受け燃え上がった!"<<"\n";
a.HP += 10;
cout << a.name << "の体力は10回復した" << "\n";
}
👆
にしてみようと思います
そのときのクラスDragonのクラス宣言とそのメンバ関数useFireRecoveryの定義は
👇
class Dragon{
public:
string name;
int HP;
int MP;
void statusDataDisplay();
void useFireRecovery(GameCharacter& a);
};
void Dragon::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
void Dragon::useFireRecovery(GameCharacter& a){
cout << name << "は灼熱のフレアを"<<a.name<<"に吐いた !" << "\n";
cout << a.name << "は灼熱のフレアを受け燃え上がった!"<<"\n";
a.HP += 10;
cout << a.name << "の体力は10回復した" << "\n";
}
👆
のようにしてみたいと思います
早速クラスDragonとそのメンバ関数を用いたプログラムを実行してみたいと思います
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
//クラスGameCharacterにはuseFireRecovery(GameCharacter& a)を設定しません
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
class Dragon {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
void useFireRecovery(GameCharacter& a);
//クラスDragon特有のメンバ関数useFireRecoveryです
};
void Dragon::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
void Dragon::useFireRecovery(GameCharacter& a) {
cout << name << "は灼熱のフレアを" << a.name << "に吐いた !" << "\n";
cout << a.name << "は灼熱のフレアを受け燃え上がった!" << "\n";
a.HP += 10;
cout << a.name << "の体力は10回復した" << "\n";
}
int main() {
GameCharacter Lyliane;
Lyliane.name = "リリアーネ";
Lyliane.HP = 10;
Lyliane.MP = 8;
Dragon Pokky;
Pokky.name = "ポッキー";
Pokky.HP = 15;
Pokky.MP = 5;
Lyliane.statusDataDisplay();
Pokky.statusDataDisplay();
Pokky.useFireRecovery(Lyliane);
Lyliane.statusDataDisplay();
Pokky.statusDataDisplay();
return 0;
}
プログラムの実行結果
リリアーネ
HP 10
MP 8
ポッキー
HP 15
MP 5
ポッキーは灼熱のフレアをリリアーネに吐いた!
リリアーネは灼熱のフレアを受け燃え上がった!
リリアーネの体力は10回復した
リリアーネ
HP 20//🌞体力が回復しています
MP 8
ポッキー
HP 15
MP 5
マックス「クラスGameCharacterとクラスDragonの2つのクラスを作製したってわけだ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます