int型の変数xにはx=1,x=5のように様々な数値データを代入することができます そのとき変数xをもちいてさまざまな数値データを表すことができますがそのことを多態性(ポリモーフィズム)といいます

親クラス型のオブジェクトのアドレスを親クラス*型のポインタ変数に代入することにより親クラス型のオブジェクトのメンバ変数 、メンバ関数に相当するものをポインタ変数にアロー演算子を用いて表すことができます

ソーラー「みなさん


今日は


🌞  🌞  🌞  🌞  🌞

親クラス型のオブジェクトのアドレスを

親クラス*型のポインタ変数に代入することにより


親クラス型のオブジェクトのメンバ変数

親クラス型のオブジェクトのメンバ関数に相当するものを


親クラス*型のポインタ変数にアロー演算子を用いて


表現することができます。

🌞  🌞  🌞  🌞  🌞

ということを


考察してみたいと思います。」


マックス「なんだ アロー演算子か  久しいな」


ソーラー「まずは次のプログラムをご覧ください」



#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の親クラスGameCharacter型のオブジェクト宣言をおこなっています


GameCharacter* pta;


//👆GameCharacter*型のポインタ変数ptaを作製しました


pta = &Lyliane;

pta->name = "リリアーネ";

pta->HP = 10;

pta->MP = 8;

pta->statusDataDisplay();



return 0;

}



ビルド実行結果


リリアーネ

HP 10

MP 8




ソーラー「このプログラムでは


Lylianeの親クラスGameCharacter型のオブジェクト宣言


GameCharacter Lyliane;


が実行されています。


そして生成された親クラスGameCharacter型のオブジェクトLylianeのアドレス


&Lyliane


ptaのGameCharacter*型のポインタ変数宣言


GameCharacter* pta;


によって作製された


GameCharacter*型のポインタ変数


pta


に代入されています。


すると

Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;

Lyliane.statusDataDisplay();


に相当するものを


GameCharacter*型のポインタ変数


pta


アロー演算子を用いた


pta->name = "リリアーネ";

pta->HP = 10;

pta->MP = 8;

pta->statusDataDisplay();


で実行することができるようになります。」


マックス「なるほど


親クラスGameCharacter型のオブジェクトLyliane


のアドレス


&Lyliane


を代入するために


親クラスGameCharacter*型のポインタ変数


pta


を作製したわけだ。


そして


親クラスGameCharacter型のオブジェクトLylianeのメンバ変数


Lyliane.name

Lyliane.HP

Lyliane.MP


親クラスGameCharacter型のオブジェクトLylianeのメンバ関数


Lyliane.statusDataDisplay()



pta->name

pta->HP

pta->MP

pta->statusDataDisplay()


であらわされるってわけだな。」










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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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