親クラスから子クラスへクラスの継承を行っても親クラス型のオブジェクト宣言、子クラス型のオブジェクト宣言ともに実行することができます

ソーラー「さてさて再び


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

というわけだ」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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