🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
親クラスから子クラスへクラスの継承を行っても親クラス型のオブジェクト宣言、子クラス型のオブジェクト宣言ともに実行することができます
親クラスから子クラスへクラスの継承を行っても親クラス型のオブジェクト宣言、子クラス型のオブジェクト宣言ともに実行することができます
ソーラー「さてさて再び
class Dragon:public GameCharacter
を記述して
親クラスGameCharacterから
子クラスDragonへ
クラスの継承を行うことにより
親クラスGameCharacterのクラス宣言内の
メンバ変数宣言
string name;
int HP;
int MP;
メンバ関数宣言
void statusDataDisplay();
が
子クラスDragonのクラス宣言内へ受け継がれていく様子を観察してみたいと思います
まず
親クラスとなる
GameCharacterのクラス宣言と
GameCharacterのメンバ関数statusDataDisplay() の定義を
次のように設定してみます。
👇
//👇🌞🌞🌞クラスGameCharacterです🌞🌞🌞
class GameCharacter {
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のメンバ関数の定義を
次のように設定してみます。
//👇🌞🌞🌞クラス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と子クラスDragonが用いられたプログラムを実行して見たいと思います
」
次のプログラムをご覧ください
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
class Dragon:public GameCharacter {
public:
int DP;//👈ドラゴン型のキャラクターだけに備わっているドラゴンポイントです
void DagonstatusDataDisplay();
};
//👇🌞🌞🌞クラスDragonのメンバ関数DragonstatusDataDisplay()の定義です🌞🌞🌞
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
int main() {
Dragon Pokky;
Pokky.name = "ポッキー";
Pokky.HP = 20;
Pokky.MP = 3;
Pokky.DP = 2;
Pokky.DagonstatusDataDisplay();
return 0;
}
ビルド実行結果
ポッキー
HP 20
MP 3
DP 2
ぶーにゃん「にゃ~~~~」
ソーラー「
このプログラムのように
親クラスから
子クラスへと
クラスの継承をおこなって
親クラスGameCharacterの
メンバ変数宣言
メンバ関数宣言
を引き継いでいくことができるんだね。」
マックス「
親クラスGameCharacterの
メンバ変数宣言
メンバ関数宣言
を引き継いだ
子クラスDragonを作製し
子クラスDragon型のオブジェクトPokkyを作製して
子クラスDragon型のオブジェクトPokkyのメンバ変数
Pokky.name
Pokky.HP
Pokky.MP
Pokky.DP
を生成することにより
ドラゴンタイプのキャラクターのデータ
name
HP
MP
DP
すべて
をとりあつかうことが
できるようになったわけだな😊」
ソーラー「そうなんです。
ドラゴンタイプのキャラクターのステータスデータには
DP(ドラゴンポイント)というものが備わっています
DPはドラゴンタイプのキャラクター特有のステータスデータなので
GameCharacterクラスでは
取り扱うことはできませんでしたね
そのため
ドラゴンタイプのキャラクター特有のステータスデータDPを取り扱うために
DPのメンバ変数宣言が備わっている
子クラスDragonを作製したというわけなんです
さらに
ドラゴンタイプのキャラクターのステータスデータ
name
HP
MP
をとりあつかうために
子クラスDragonに
親クラスGameCharacterの
メンバ変数宣言
メンバ関数宣言
を引き継いだというわけです
今日は
親クラスGameCharacterから
子クラスDragonへと
クラスの継承が行われた状態で
Pokkyの2つのクラス
GameCharact
Dragon
型のオブジェクト宣言
GameCharacter Pokky;
Dragon Pokky;
を
それぞれ行ってみたいと思うんだ
親クラスGameCharacterから
子クラスDragonへ
クラスの継承が行われたといっても
親クラスGameCharacterが使用できなくなったわけではないんだよ(´▽`*)/
つまり
親クラスGameCharacter型のオブジェクトPokkyを作製することも
できるし
子クラスDragon型のオブジェクトPokkyを作製することも
できるというわけなんだ。
まずは
親クラスGameCharacter型のオブジェクトPokkyを作製してみたいとおもいます
次のプログラムをご覧ください。」
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
class Dragon :public GameCharacter {
public:
int DP;//👈ドラゴン型のキャラクターだけに備わっているドラゴンポイントです
void DragonstatusDataDisplay();
};
//👇🌞🌞🌞クラスDragonのメンバ関数DragonstatusDataDisplay()の定義です🌞🌞🌞
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";
}
int main() {
GameCharacter Pokky;
Pokky.name = "ポッキー";
Pokky.HP = 20;
Pokky.MP = 3;
Pokky.statusDataDisplay();
return 0;
}
プログラムの実行結果
ポッキー
HP 20
MP 3
ソーラー「このように
親クラスGameCharacter
から
子クラスDragon
へ
クラスの継承が行われていても
Pokkyの親クラスGameCharacter型のオブジェクト宣言
GameCharacter Pokky;
を実行し
親クラスGameCharacter型のオブジェクトPokkyのメンバ変数
Pokky.name
Pokky.HP
Pokky.MP
親クラスGameCharacter型のオブジェクトPokkyのメンバ関数
Pokky.statusDataDisplay()
を作製して使用することができるんだ。
もちろん
子クラスDragon型のオブジェクト宣言
Dragon Pokky;
を実行し
子クラスDragon型のオブジェクトPokkyのメンバ変数
Pokky.name
Pokky.HP
Pokky.MP
Pokky.DP
子クラスDragon型のオブジェクトPokkyのメンバ関数
Pokky.DragonstatusDataDisplay()
を作製して使用することができるんだ。」
そのプログラムはこちらです
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
class Dragon :public GameCharacter {
public:
int DP;//👈ドラゴン型のキャラクターだけに備わっているドラゴンポイントです
void DragonstatusDataDisplay();
};
//👇🌞🌞🌞クラスDragonのメンバ関数DragonstatusDataDisplay()の定義です🌞🌞🌞
void Dragon::DragonstatusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
cout << "DP " << DP << "\n";//👈ドラゴン型のキャラクターのDPを表示することができます
}
int main() {
Dragon Pokky;
Pokky.name = "ポッキー";
Pokky.HP = 20;
Pokky.MP = 3;
Pokky.DP = 2;
Pokky.DragonstatusDataDisplay();
return 0;
}
プログラムの実行結果
ポッキー
HP 20
MP 3
DP 2
マックス「ふ~む そういう仕組みなのか
そして
GameCharacter Pokky;
を実行すると
親クラスGameCharacter型のオブジェクトPokkyのメンバ変数
Pokky.name
Pokky.HP
Pokky.MP
が生成されるので
親クラスGameCharacter型のオブジェクトPokkyであつかうことのできるのは
キャラクターの
name
HP
MP
となり
Dragon Pokky;
を実行すると
子クラスDragon型のオブジェクトPokkyのメンバ変数
Pokky.name
Pokky.HP
Pokky.MP
Pokky.DP
が生成されるので
親クラスGameCharacterを継承した子クラスDragon型のオブジェクトPokkyであつかうことのできるのは
キャラクターの
name
HP
MP
DP
というわけだ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます