22章
演習問題の段階
Level 1から7へ、文法確認から設計・標準ライブラリへ段階的に上げる。
段階の一覧
| Level | 内容 | 対応する回 |
|---|---|---|
| 1 | 文法確認 | 第1回〜第2回 |
| 2 | 小さな機能 | 第3回〜第5回 |
| 3 | クラス | 第6回〜第8回 |
| 4 | 複数クラス | 第9回〜第10回 |
| 5 | 継承・ポリモーフィズム | 第11回〜第13回 |
| 6 | 設計 | 第14回〜第15回 |
| 7 | 標準ライブラリと所有関係 | 第16回〜第18回 |
Level 1:文法確認
例:
int a = 10;
int b = 20;a + bを表示せよ。
Level 2:小さな機能
例:
int max(int a, int b);を作成せよ。
Level 3:クラス
LED led(23);
led.on();を実装せよ。
Level 4:複数クラス
Robot ├── Motor └── Sensor
Level 5:継承・ポリモーフィズム
Sensor ├── IMU └── GPS
Level 6:設計
「この機能はどのクラスに置くべきか」を自分で考える段階。
「この機能はどのクラスに置くべきか」を受講者自身に考えさせる。
Level 7:標準ライブラリと所有関係
Level 6までで書いたプログラムを、道具を替えて書き直す段階。新しい機能を覚えることが目的ではなく、自分で管理していた仕事を手放すのが目的である。
Sensor* sensors[3] ← Level 5・6で書いた形
↓ 個数の管理をやめる
std::vector<Sensor*> ← 第16回
↓ 解放の管理をやめる
std::vector<std::unique_ptr<Sensor>> ← 第17回
↓ 依存の向きを決める
Robot → Controller(一方向) ← 第18回- センサの配列を
std::vectorに置き換え、SENSOR_COUNTを消す(第16回) newしたものをstd::unique_ptrに持たせ、deleteを消す(第17回)- 互いを
#includeしているヘッダを、前方宣言か引数渡しで解く(第18回)
演習の雛形
演習の雛形はcode/exercises/に置く。
各回の演習の解答例は解答例のページにまとめている。その回の授業が終わったあとに公開するため、まだ実施していない回は一覧に「未公開」と表示される。