クラス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つのクラスを作製したってわけだ」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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