==== 昨日やったやつ ==== {{url>https://replit.com/@youetsusato/Ji-Cheng-todesutorakutatoareyakoreya?v=1&embed=true#main.cpp 800, 1200}} ====== オーバーライドの練習 ====== **汎化 ⇔ 特化**\\ ここまで勉強すると、設計の方針は2種類の方向性が出てくる。\\ * クラスの機能を増やしていき、継承先の機能をどんどん特殊化していく方向の設計方法 * クラスの最終形を先に設計し、それぞれの派生クラスの共通部分をベースとして抜き出す方法 ==== 純粋仮想関数=0 ==== * 宣言時に仮想関数に=0を付ける(意味不明) * 純粋仮想関数は同じクラス内では実装しない関数 => 必ず派生先ではオーバーライドされる関数になる(じゃないとインスタンス化できない) * 純粋仮想関数を含むクラスはインスタンス化できない(授業で言わなかったけど、そういうクラスを__抽象クラス__っていうよ) === 実践編 === 問題1\\ 汎化+オーバーライドで、RPGのキャラを作ってみよう!\\ まずはベースクラスを作ろう。\\ ゲームキャラのベースクラス\\ cCharBase 属性(メンバ変数)  ・名前(string)  ・ライフ(int)  ・攻撃力 (int)  ・防御力 (int)  ・職業ID(enum? int?) ------------------------- 機能(メンバ関数:この時点ではすべて純粋仮想関数で宣言)  ・名乗る(自己紹介) 表示のみ  ・戦う(基本攻撃)    ・防御(身を守る)  ・逃げる(逃亡)  setter getter constructorも欲しいね ------------------------- 問題2\\ 派生で、以下のクラスを作る それぞれ、基本機能のほかに ・必要な属性(まりょく、MP?) ・特殊攻撃(職業別攻撃)を追加  →戦士(cWarrior)  ・特殊攻撃はない、戦うのコマンドが以上に強い  →魔法使い(cWizard)  ・戦うは弱い、魔法が攻撃のメイン  ・魔法(ターゲットを魔力で攻撃)  →僧侶(cCleric) ・ある程度戦えるけど、戦士ほどではない  ・魔法(ターゲットを魔力で回復)  →盗賊(cThief)  ・戦うのは弱い  ・ぬすむ(たーげーっとから金を盗む) 問題3 それぞれのインスタンスを作って、行動させてみよう。\\ インスタンス作成⇒メンバ関数呼び出し