enum ResultOfFight { PLAYERWIN, ENEMYWIN, DRAW };
class Battle
{
public:
ResultOfFight Fight(Player* player, Trainer* enemy);
ResultOfFight Fight(Player*player, Monster* monster)
{
Toumei x;
x.PlusMonster(monster);
return Fight(player,&x);
}
}
今時分はvoid Battle::Fight(){・・・・}の中身を書いているですが
(1)enum ResultOfFight { PLAYERWIN, ENEMYWIN, DRAW }; への返し方
(2)
ResultOfFight Fight(Player*player, Monster* monster)
{
Toumei x;
x.PlusMonster(monster);
return Fight(player,&x); ←これが何を意味しているかが分からない
}
この二つがよく分かっていません
理解していないばかりに、分かりづらく質問をしているのかもしれませんが
どなたかご教授してくださると嬉しいです
No.1ベストアンサー
- 回答日時:
(1)とりあえず「への返し方」は「の返し方」でしょうか?
そうだとすると、{...}の中のいずれかを返せばいいのです。
これは、その値そのままを書かなくてはならないというのではなくそのような値を返す関数を呼び出した結果を返してやってもいいのです。
(2)見たとおり、Fight(player,&x)の結果をこの関数の戻り値にしているだけです。
…とはいえ、全くの初心者にはちょっと分かりづらいテクニックを使っているようです。
テクニックその1:関数/メソッドのオーバーロード
C++では引数の型が違えば同じ名前の関数やメソッドを複数定義できます。これをオーバーロード(多重定義)といいます。
あなたが質問されている関数はResultOfFight Fight(Player*player, Monster* monster)で、それと別に直前でResultOfFight Fight(Player* player, Trainer* enemy)が宣言されています。2番目の変数の型が違うので、この2つは別の関数です。
テクニックその2:クラスの継承
しかし、関数呼び出しの引数として渡している型はToumei*で、Monster*でもTrainer*でもありません。
これはクラス名等からの憶測なのですが、このソースはポケモンのようにモンスターをトレーニングしてトレーナー同士で対戦するゲームのソースの一部ではないのでしょうか。
だとしたら、トレーナー同士の対戦と野良モンスターとの戦いで戦闘ロジックを共通化したいところですが、(これまたクラス名と問題の関数の処理からの推察ですが)野良モンスターとの戦いを「透明なトレーナーがいる」ものとしてトレーナー同士の対戦ロジックに渡して共通化しているように思います。
親クラスのポインタには子クラスのポインタが問題なく代入できますので、TrainerがToumeiの親クラスであるならば2番目がTrainer*型のほうのFightが呼び出されます。
…でも、あなたが質問された事柄はC++の学習をきちんとしていれば簡単なことです。きついことを言うようですが、もう一度C++の勉強をしなおしてからこのソースに手をつけたほうがいいかと思います。
この回答への補足
(1)とりあえず「への返し方」は「の返し方」でしょうか?
そうだとすると、{...}の中のいずれかを返せばいいのです。
これは、その値そのままを書かなくてはならないというのではなくそのような値を返す関数を呼び出した結果を返してやってもいいのです。
すいません
具体的な例を教えていただけませんでしょうか?
またこういったものを勉強するにあたって
参考になるようなサイトというものをご存じないでしょうか?
No.3
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) PowerDVDで再生したときだけエコー音がかかる 2 2023/01/07 19:22
- au(KDDI) auのMusic playerについて 1 2022/07/21 20:18
- Windows 10 WindowsホストのVMware workstationで仮想マシンをシステム起動時に起動できるか 3 2023/06/18 17:52
- 防犯カメラ・監視カメラ・小型カメラ MP4の再生 3 2022/05/03 18:10
- GYAO! You tubeなどでダウンロードした動画ファイルの再生について 7 2023/07/03 16:05
- ビデオカード・サウンドカード 映像(MP4)が乱れ始めました 3 2022/04/14 13:29
- 音楽・動画 “YT Music” アプリと “AT player” アプリは大きく何が違うの? 2 2022/09/20 13:42
- マルウェア・コンピュータウイルス FlashPlayerの削除とマルウェア感染について 5 2023/02/23 20:52
- Ruby パイソンプログラミング 2 2022/12/03 18:44
- ニコニコ動画 動画ダウンロード 3 2023/03/01 16:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
応用情報技術者試験の令和元年...
-
インクリメント演算子のみを用...
-
Linux Cプログラミングを学ぶた...
-
右ビットシフト
-
Windows formアプリで データグ...
-
プログラミングについて。 1つ...
-
これなにがちがうんですか??
-
c言語
-
chatgptでつくってもらったコー...
-
ArduinoのジャイロモジュールMP...
-
Notepad++の関数リスト表示の変...
-
どちのほうがすきですか?
-
WindowsのCapsLock(キャップス...
-
質問失礼します。 プログラム言...
-
どなたかこのプログラミングを...
-
VisualStudio2022でC言語プログ...
-
大量のデータを読み込んで表示...
-
C言語をコンパイルするとコンピ...
-
double型が正常に認識されてい...
-
Notepad++の関数リスト表示でC...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列と関数の練習問題
-
システムエンジニアの適正について
-
[C言語]fputsとfprintfの違い
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
どちのほうがすきですか?
-
ArduinoのジャイロモジュールMP...
-
大量のデータを読み込んで表示...
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
C言語 列挙型(enum型)変数について
-
こんなことてしますか??
-
C言語の関数と配列に関する質問
-
Linuxでの開発環境構築や設定の...
-
質問失礼します。 プログラム言...
-
MACで動く実行ファイルをWindow...
-
WindowsのCapsLock(キャップス...
-
これなにがちがうんですか??
-
卒業研究でよく分からないとこ...
-
gcc13.2のバグ?
おすすめ情報