親クラスのメンバ変数宣言が継承されると子クラスのメンバ関数内で親クラスのメンバ変数を使用することができるようになります

ソーラー「実はその前に


親クラス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


使用することができる

使用できない



対応しているわけだ


シンプルな仕組みだな」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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