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/に置く。

各回の演習の解答例は解答例のページにまとめている。その回の授業が終わったあとに公開するため、まだ実施していない回は一覧に「未公開」と表示される。