クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります



今日のお題は


でんっ


クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります


なぜなら


親クラスから子クラスへクラスの継承を行うと


親クラスのクラス宣言内のメンバ変数宣言は


子クラスのクラス宣言内に記述されていることになるからです


マックス「


クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります~~🐧


なぜなら


親クラスから子クラスへクラスの継承を行うと


親クラスのクラス宣言内のメンバ変数宣言は


子クラスのクラス宣言内に記述されていることになるからです



なんか、こう、分かりそうで


なんか 分からないな・・・」




ソーラー「クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります~~🐧


なぜなら


親クラスから子クラスへクラスの継承を行うと


親クラスのクラス宣言内のメンバ変数宣言は


子クラスのクラス宣言内に記述されていることになるからです~~🐤


と唱えているうちに


理解できてくるのかな😊」



てんC「では状況をシュミレートしてみます。」


マックス「てんC 俺をまともにシュミレートしてくれぇいっ」



てんC「では


まず

親クラスとなる

GameCharacterのクラス宣言と


GameCharacterのメンバ関数statusDataDisplay() の定義を


次のように設定してみます。

👇

//👇🌞🌞🌞クラスGameCharacterです🌞🌞🌞

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";

}


てんC「

次に

親クラスGameCharacterを継承した

Dragonのクラス宣言と


クラスDragonのメンバ関数useFireRecovery(GameCharacter& a) の定義を


次のように設定してみます。


//👇ここに注目🌞🌞🌞クラスGameCharacterを継承したクラスDragonです🌞🌞🌞


class Dragon:public GameCharacter {

public:

void 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";


}


てんC「この


子クラス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";


}

👆

内では


親クラスGameCharacterのメンバ変数


name

HP


が使用されています


このようなことが可能になるのは


親クラスGameCharacterから


子クラスDragonへクラスの継承がおこなわれているので


親クラスGameCharacterのクラス宣言内のメンバ変数宣言


string name;

int HP;

int MP;


親クラスGameCharacterのクラス宣言内のメンバ関数宣言


void statusDataDisplay();


子クラスDragonのクラス宣言内に記述されていることになるからです


ですので


子クラス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";


}


内で

name

HP

使用できるようになるのですね


メンバ変数宣言

string name;

int HP;

int MP;



が記述されていることになるからこそ


メンバ関数useFireRecoveryの定義内で


name

HP

MP

の変数宣言をおこなうことなく


name

HP

MP



用いることができるというわけです


この親クラスGameCharacterを継承した子クラスDragonを使ったプログラムを


実行してみます」

👇

#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


//👇🌞🌞🌞クラスGameCharacterです🌞🌞🌞

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";

}





//👇ここに注目🌞🌞🌞クラスGameCharacterを継承したクラスDragonです🌞🌞🌞


class Dragon :public GameCharacter {

public:

void 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";


}


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へクラスの継承がおこなわれているので


親クラスGameCharacterのクラス宣言内のメンバ変数宣言


string name;

int HP;

int MP;


親クラスGameCharacterのクラス宣言内のメンバ関数宣言


void statusDataDisplay();


子クラスDragonのクラス宣言内に記述されていることになるから


子クラス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";


}


内で


親クラスGameCharacterのメンバ変数


name

HP


を使用することは可能ってわけだ


なるほどな」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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