🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります
クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります
今日のお題は
でんっ
クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります
なぜなら
親クラスから子クラスへクラスの継承を行うと
親クラスのクラス宣言内のメンバ変数宣言は
子クラスのクラス宣言内に記述されていることになるからです
マックス「
クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります~~🐧
なぜなら
親クラスから子クラスへクラスの継承を行うと
親クラスのクラス宣言内のメンバ変数宣言は
子クラスのクラス宣言内に記述されていることになるからです
なんか、こう、分かりそうで
なんか 分からないな・・・」
ソーラー「クラスの継承を実行することにより親クラスのメンバ変数を子クラスのメンバ関数の定義内で使用することができるようになります~~🐧
なぜなら
親クラスから子クラスへクラスの継承を行うと
親クラスのクラス宣言内のメンバ変数宣言は
子クラスのクラス宣言内に記述されていることになるからです~~🐤
と唱えているうちに
理解できてくるのかな😊」
てん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
を使用することは可能ってわけだ
なるほどな」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます