23章

教える際の重要ポイント

暗記させない。表面的に教えない。目的化しない。

コードを暗記させない

例えば、

class Motor {
};

を暗記することを目標にしない。重要なのは、

「なぜMotorをクラスにするのか?」

を説明できることである。

public / private / protectedを表面的に教えない

単に、

public = 外から使える
private = 外から使えない

だけで終わらせない。「なぜ内部データを隠す必要があるのか」を説明する。

サンプルの使い方

各回のページの「動かして確かめる」で紹介しているサンプルは、code/examples/に回ごとに1つある(対応表はcode/README.md)。授業中に一緒に動かすためのもので、演習の答えそのものではない。

やること狙い
説明の前に動かす「何が問題なのか」を先に見せたい回(第16〜18回)に向く
説明の後に動かす仕組みの確認。多くの回はこちら
わざと壊す各回の「確かめること」に、壊して見せる手順を書いてある(virtualを外す、breakを消す、前方宣言を#includeに変える、など)

先に教員が一度書き込んでおくと、演習で手が止まった受講者に「さっき動かしたあれと同じ形」と言える。出力が出ない場合はシリアルの速度(115200)と、書き込み直後のモニタの接続を確認する。

継承を目的化しない

「C++には継承があるから使う」のではなく、

共通するインターフェースがある
        ↓
共通部分を抽象化したい
        ↓
継承を利用する

という順番で考える。

virtualは図で説明する

             Sensor
               │
       ┌───────┴───────┐
       ↓               ↓
      IMU              GPS
       │                │
    update()         update()

そして、

Sensor* sensor = &imu;
sensor->update();

がなぜIMU::update()を呼べるのかを説明する。

つまずきやすい箇所の早見表

回つまずきやすい点対処
第1回=と==の取り違えエラーにならない例を見せる
第2回switchのbreak忘れフォールスルーを実演する
第4回*と&の混乱図でアドレスと値を分けて描く
第6回クラス定義末尾の;忘れエラーメッセージの読み方を教える
第7回.cppでLED::を書き忘れる宣言と定義の対応を確認させる
第10回has-aをisのように継承するRobotとMotorの例で確認する
第11回overrideを付けない必ず付ける規約にする