オーバーライドの練習

汎化 ⇔ 特化
ここまで勉強すると、設計の方針は2種類の方向性が出てくる。

  • クラスの機能を増やしていき、継承先の機能をどんどん特殊化していく方向の設計方法
  • クラスの最終形を先に設計し、それぞれの派生クラスの共通部分をベースとして抜き出す方法
  • 宣言時に仮想関数に=0を付ける(意味不明)
  • 純粋仮想関数は同じクラス内では実装しない関数 ⇒ 必ず派生先ではオーバーライドされる関数になる(じゃないとインスタンス化できない)
  • 純粋仮想関数を含むクラスはインスタンス化できない(授業で言わなかったけど、そういうクラスを抽象クラスっていうよ)

実践編

問題1
汎化+オーバーライドで、RPGのキャラを作ってみよう!
まずはベースクラスを作ろう。

ゲームキャラのベースクラス\\
cCharBase
属性(メンバ変数)
 ・名前(string)
 ・ライフ(int)
 ・攻撃力 (int)
 ・防御力 (int)
 ・職業ID(enum? int?)
-------------------------
機能(メンバ関数:この時点ではすべて純粋仮想関数で宣言)
 ・名乗る(自己紹介) 表示のみ 
 ・戦う(基本攻撃)   
 ・防御(身を守る)
 ・逃げる(逃亡)
 setter getter constructorも欲しいね
-------------------------

問題2\\

派生で、以下のクラスを作る
それぞれ、基本機能のほかに
・必要な属性(まりょく、MP?)
・特殊攻撃(職業別攻撃)を追加

 →戦士(cWarrior)
 ・特殊攻撃はない、戦うのコマンドが以上に強い
 →魔法使い(cWizard)
 ・戦うは弱い、魔法が攻撃のメイン
 ・魔法(ターゲットを魔力で攻撃)
 →僧侶(cCleric)
  ・ある程度戦えるけど、戦士ほどではない
 ・魔法(ターゲットを魔力で回復)
 →盗賊(cThief)
 ・戦うのは弱い
 ・ぬすむ(たーげーっとから金を盗む)

問題3
それぞれのインスタンスを作って、行動させてみよう。\\
インスタンス作成⇒メンバ関数呼び出し
  • game-engineer/classes/2022/game-programing-1/second-term/01/01-13-5.txt
  • 最終更新: 3年前
  • by root