==== 昨日やったやつ ====
{{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
それぞれのインスタンスを作って、行動させてみよう。\\
インスタンス作成⇒メンバ関数呼び出し