親クラスのメンバ変数宣言のアクセス指定子がprivateに設定されている場合 親クラスのメンバ変数宣言は子クラスに引き継がれず子クラスのメンバ関数内で親クラスのメンバ変数を用いることはできません

ソーラー「今日はクラスの継承に関して



           🌞🌞🌞とても🌞🌞🌞



      基本的なことを学んでみようと思うんだ


                                 」


マックス「とても基本的なこと?


なんだ~❔(*´▽`*) そんなのがあるのか」




ソーラー「それは


親クラスから子クラスへクラスの継承を行うと



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

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

のアクセス指定子が

publicに設定されている場合


親クラスのメンバ変数宣言、メンバ関数宣言は子クラスに引き継がれることになりますが


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

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

のアクセス指定子が

privateに設定されている場合


親クラスのメンバ変数宣言、メンバ関数宣言は子クラスに引き継がれない


というものなんです」


マックス「は?


いまいち意味がよくわから~ん」


ソーラー「では


そのことを説明するために



親クラスとなる

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();


のアクセス指定子を

publicでなく

privateに設定してみます


そのときの


親クラス

GameCharacterのクラス宣言と


GameCharacterのメンバ関数statusDataDisplay() の定義は以下のようになります



👇

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

class GameCharacter {


private://👈ここに注目🌞publicからprivateに変更されました

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からprivateに変更されましたので


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


が記述されていないのと等しい状態になる



アクセス指定子を


publicに指定した場合と

privateに設定した場合の


ちがいというわけだ」


ソーラー「そうなんです


ここで


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


string name;

int HP;

int MP;


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


void statusDataDisplay();



子クラスDragonのクラス宣言内に引き継がれるということは


どういうことなのかを考察してみようよ」



マックス「はい???


??????


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

string name;

int HP;

int MP;


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

void statusDataDisplay();



子クラスDragonのクラス宣言内に引き継がれるということはどういうことなのか?


か?


???


ど~いうことぉ?」



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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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