🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
親クラスのメンバ変数宣言が継承されると子クラスのメンバ関数内で親クラスのメンバ変数を使用することができるようになります
親クラスのメンバ変数宣言が継承されると子クラスのメンバ関数内で親クラスのメンバ変数を使用することができるようになります
ソーラー「実はその前に
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が
子クラスDragonのクラス宣言内に引き継がれるということは
どういうことなのかを考察してみようよ」
マックス「微妙ぃ表現だな
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が
子クラスDragonのクラス宣言内に引き継がれるということはどういうことなのか?
っていってもなあ?
ど~いうことぉ?
一体ぜんたい・・・
何のことぉ?」
ソーラー「そ・れ・は・・・(´▽`*)
そのことを説明するために
親クラスとなる
GameCharacterのクラス宣言と
GameCharacterのメンバ関数statusDataDisplay()の定義を
以下のように設定してみます
👇
//👇🌞🌞🌞クラスGameCharacterです🌞🌞🌞
class GameCharacter {
public://🌞アクセス指定子はpublicになっています
string name;
int HP;
int MP;
void statusDataDisplay();
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
👇
次に
親クラスGameCharacterを継承した
子クラスDragonのクラス宣言と
子クラスDragonのメンバ関数DragonstatusDataDisplay()の定義を
次のように設定してみます
//👇🌞🌞🌞クラスGameCharacterを継承したクラスDragonです🌞🌞🌞
class Dragon:public GameCharacter {
public:
int DP;//👈ドラゴン型のキャラクターだけに備わっているドラゴンポイントです
void DragonstatusDataDisplay();
};
//👇🌞🌞🌞Dragon型のキャラクターのステータスデータを表示するためのクラスDragonのメンバ関数DragonstatusDataDisplay()の定義です🌞🌞🌞
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
ソーラー「このとき
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
のアクセス指定子は
publicです
ですので
親クラスGameCharacterのメンバ変数宣言、メンバ関数宣言は子クラスDragonに引き継がれることになります
つまり
子クラスDragonのクラス宣言内には
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が記述されているのと等しい状態になっています
そして
先程も学んだように
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
のアクセス指定子が
privateの場合は
親クラスGameCharacterのメンバ変数宣言、メンバ関数宣言は子クラスDragonに引き継がれないことになります
つまり
子クラスDragonのクラス宣言内には
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が記述されていないのと等しい状態になっています」
マックス「なんだ さっきのエピソードと話が同じじゃないか」
ソーラー「そう
そして
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
のアクセス指定子が
publicに設定されている場合は
子クラスDragonのクラス宣言内には
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が記述されているのと等しい状態になっているのですが
だからこそ
子クラスDragonのメンバ関数DragonstatusDataDisplay()
の定義
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
内で
親クラスGameCharacterのメンバ変数
name
HP
MP
を使用することができるんだよ
🌞 🌞 🌞
親クラスGameCharacterのメンバ変数宣言
親クラスGameCharacterのメンバ関数宣言
が
子クラスDragonのクラス宣言内に引き継がれる🌞 🌞 🌞
ということは
子クラスDragonのメンバ関数DragonstatusDataDisplay()
の定義
👇
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
👆
内で
親クラスGameCharacterのメンバ変数
name
HP
MP
を使用することができるということを意味しています
親クラスGameCharacterのメンバ変数
name
HP
MP
は
子クラスDragonのメンバ関数DragonstatusDataDisplay()
の定義
👇
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
👆
内で変数宣言されていなくても問題ありません
繰り返すと
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
のアクセス指定子が
🌞public🌞
に設定されていると
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
は
子クラスDragonに引き継がれることになります
だからこそ
子クラスDragonのメンバ関数DragonstatusDataDisplay()
の定義
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
内で
親クラスGameCharacterのメンバ変数
name
HP
MP
を
変数宣言することなく
使用することができるんです」
マックス「ふ、ふ~む
そういうことか
ほう、ほお
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
のアクセス指定子が
public
private
に設定されていることは
親クラスGameCharacterのメンバ変数宣言
string name;
int HP;
int MP;
親クラスGameCharacterのメンバ関数宣言
void statusDataDisplay();
が
子クラスDragonのクラス宣言内に引き継がれる
子クラスDragonのクラス宣言内に引き継がれない
ということに対応していて
子クラスDragonのメンバ関数内で
親クラスGameCharacterのメンバ変数
name
HP
MP
を
使用することができる
使用できない
に
対応しているわけだ
シンプルな仕組みだな」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます