親クラスのクラス宣言内でアクセス指定子がpublicに設定された親クラスのメンバ変数、メンバ関数をアクセス指定子publicを使って子クラスへ継承してみます

ソーラー「


親クラスGameCharacterのクラス宣言と


親クラスGameCharacterのメンバ関数statusDataDisplay()


の定義を以下のように設定します


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

class GameCharacter {


public:

string name;

int HP;

int MP;


void statusDataDisplay();


//クラスGameCharacterにはDragon型のキャラクターだけが使用できるuseFireRecovery(GameCharacter& a)を設定しません

};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

}


とします


そして


子クラスDragonのクラス宣言と


 子クラスDragonのメンバ関数statusDataDisplay()


の定義を以下のように設定します



//👇🌞🌞🌞クラス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";


}


としてみます


このとき


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


string name;

int HP;

int MP;


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


void statusDataDisplay();


のアクセス指定子は


publicに指定されています。


この状態で


親クラスGameCharacterから


子クラスDragon



クラスの継承が行ってみたいと思います


この親クラスGameCharacter

親クラス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のメンバ変数宣言


string name;

int HP;

int MP;



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


void statusDataDisplay();


のアクセス指定子は


publicに設定されており


子クラスDragonのクラス宣言では


class Dragon:public GameCharacter


のように


アクセス指定子


public


が用いられています


この場合


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


string name;

int HP;

int MP;



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


void statusDataDisplay();




子クラスDragonのクラス宣言内に引き継がれることになります



(注意

class Dragon:public GameCharacter

でも

class Dragon:private GameCharacter

でも

class Dragon:protected GameCharacter

でも

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


string name;

int HP;

int MP;



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


void statusDataDisplay();




子クラスDragonのクラス宣言内に引き継がれることになります)



アクセス指定子がpublicに設定された



親クラスGameCharacterの


メンバ変数宣言


string name;

int HP;

int MP;


メンバ関数宣言


void statusDataDisplay();



class Dragon:public GameCharacter


のように


       🌞アクセス指定子public🌞


を用いて


クラスの継承を行った場合


Pokkyの子クラスDragon型のオブジェクト宣言


Dragon Pokky;


を実行して


子クラスDragon型のオブジェクトPokkyを作製した場合



子クラスDragon型のオブジェクトPokkyのメンバ変数


Pokky.name

Pokky.HP

Pokky.MP


子クラスDragon型のオブジェクトPokkyのメンバ関数

Pokky.statusDataDisplay()


が生成されることになります


ですので


子クラスDragon型のオブジェクトPokkyのメンバ変数


Pokky.name

Pokky.HP

Pokky.MP


子クラスDragon型のオブジェクトPokkyのメンバ関数

Pokky.statusDataDisplay()

を用いた


Dragon Pokky;

Pokky.name = "ポッキー";

Pokky.HP = 15;

Pokky.MP = 5;


Pokky.statusDataDisplay();



実行することができます



今度は


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


string name;

int HP;

int MP;



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


void statusDataDisplay();


のアクセス指定子はpublicのまま



class Dragon:private GameCharacter


のように


アクセス指定子


private


を用いてクラスの継承をおこなってみようよ」



マックス「今まで


アクセス指定子publicを使って


クラスの継承をおこなってきたが


今度は


アクセス指定子


private


か・・・


なんとな~く


クラスの継承が行われなくなるよ~な気がするな~」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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