オブジェクト指向プログラムは仕様(実行したいこと)の追加、変更に強いプログラムを目指しています
クラスが異なれば同じ名前のメンバ変数宣言、メンバ関数宣言を使用することは可能です
ソーラー「再び
クラス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";
}
//👇🌞🌞🌞クラスDragonです🌞🌞🌞
class Dragon {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
void useFireRecovery(GameCharacter& a);
};
void Dragon::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
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
と
クラスDragon
のクラス宣言に御注目下さい」
👇
//👇🌞🌞🌞クラスGameCharacterのクラス宣言です🌞🌞🌞
class GameCharacter {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
//🔥クラスGameCharacterにはuseFireRecovery(GameCharacter& a)を設定しません🔥
};
//👆🌞🌞🌞クラスGameCharacterのクラス宣言です🌞🌞🌞
//👇🌞🌞🌞クラスDragonのクラス宣言です🌞🌞🌞
class Dragon {
public:
string name;
int HP;
int MP;
void statusDataDisplay();
void useFireRecovery(GameCharacter& a);
};
//👆🌞🌞🌞クラスDragonのクラス宣言です🌞🌞🌞
ソーラー「この2つのクラスの
メンバ変数宣言
メンバ関数宣言に御注目下さい
とくに
string name;
int HP;
int MP;
void statusDataDisplay();
です」
マックス「マックス「よくみると
クラスGameCharacterのクラス宣言でも
クラスDragonのクラス宣言でも
😊全く同じ😊
メンバ変数宣言
string name;
int HP;
int MP;
メンバ関数宣言
void statusDataDisplay();
が
設定されているじゃないか
しかし、プログラムはビルドエラーになることもなく
実行できている?」
ソーラー「そうなんです
この
クラスGameCharacter
クラスDragon
のように
クラスが異っていれば
同じ名前の変数名、関数名を使用することができます
ちょうど
自作関数内と
main関数内で
つまり
異なる関数内で
同じ名前の変数名が用いられても
異なる変数とみなされるのと一緒です
そして
よくみると
GameCharacterのクラス宣言に
メンバ関数宣言
void useFireRecovery(GameCharacter& a);
を付け加えたものが
Dragonのクラス宣言なんです」
マックス「めっちゃ 構造がにているな」
ソーラー「通常
ゲームに登場してくる
ゲームキャラクター(GameCharacter)
は
すべて
name(名前)
HP
MP
のデータをもっていますし
それらのデータをコマンドプロンプト画面に表示するための関数
statusDataDisplay()
も
必要です
そして
Dragonもゲームキャラクターの1種なので
name(名前)
HP
MP
のデータをもっていますし
それらのデータをコマンドプロンプト画面に表示するための関数
statusDataDisplay()
も
必要です
だから
GameCharacter のクラス宣言
と
Dragonのクラス宣言
は
似てくるんだね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます