Skip to main content

ドラクエ風「商人クラス」で学ぶ getter / setter / public / private

🎮 授業進行カンペ:ドラクエ風「商人クラス」で学ぶ getter / setter / public / private


🧭 授業概要

  • 対象:専門学校1年(C++基礎後半)

  • 前提:クラス・メンバ関数の基本を理解している

  • 目的:getter/setterを使ったデータ保護と、public/privateの導入


⏱ 授業構成(45分想定)

時間 内容 教員アクション
0〜5分 導入(勇者が商人に話しかける小芝居) 「勇者が在庫を勝手に増やしたらどうなる?」で笑いを取る
5〜15分 バグる商人コードを実行 あえて m.stock=9999; m.price=-100; を見せて「チート商人」を演出
15〜25分 getter/setter導入 「値をチェックしてから代入する」関数の必要性を強調
25〜35分 public/private導入 「商人の金庫は鍵付き!」の比喩で説明
35〜45分 実装演習+発表 各自のコンソール出力を見せ合う(勇者バグネタを拾う)

💬 導入トーク例

「今日はドラクエの“商人”を作ります。やくそうを8Gで売る設定です。」
「ところがこの商人、外から勝手に在庫を増やせるバグがあります!」
「勇者が m.stock = 9999; って打ったら、どうなると思う?」

→ 学生「無限やくそう!」「最強チートじゃん!」
→ 教員「そう、だから商人の金庫に鍵をかけましょう」
→ ⇒ private へつなげる。


🧩 実演ポイント

1️⃣ バグる商人

  • 実行して「マイナス価格」「無限在庫」を見せる。

  • 学生の笑いを誘いながら、“危険な状態”を目で見せる。

2️⃣ 安全な商人(getter/setter+private)

  • SetPrice() に範囲チェックを追加。

  • private: を書いた瞬間に「外から触れない」ことを実演。

  • 「勇者が金庫を開けようとして怒られる!」と演出。


🧠 板書例(黒板・スライド)

public : みんなが見えるところ(入口)
private: 秘密の金庫(中身)
---------------------------
getter : 値を読む関数
setter : 値を入れる関数(チェック付き)

💬 教員のコメント例

  • 「public は “お店のカウンター”、private は “裏の倉庫”」

  • 「倉庫に勝手に入る勇者は万引き犯!」

  • 「getter/setter は “店員を通して取引する”」


🎯 チェックポイント

  • getter/setterの命名ルール:Get○○() / Set○○()

  • 値チェックは setter にまとめる

  • private 変数はクラス外からアクセス不可

  • 直接代入の禁止を実演して実感させる


🧩 練習問題指導メモ

  • Q1〜Q3:個人で実装させる(10分)

  • Q4:実行出力をペアで見せ合う

  • Q5(発展):2回目授業の導入へ(Playerクラスとの取引)


🧩 よくある質問と返し方

質問 回答例
「なんで全部publicでよくないんですか?」 「家の金庫を玄関に置かないのと同じ。守るものは隠す!」
「priceをマイナスにしても別に動くけど?」 「コンピュータは素直。だから人間がルールを教える。」
「getter/setterだとコード長くない?」 「安全のためのコスト。後でバグ直すより安い!」

🪜 次回へのつなぎ方

  • 「商人が商品(Item)を複数持つ」→ vectorへ

  • 「プレイヤーと取引」→ has-a 関係へ

  • 「商品タイプ」→ enum classへ

  • constメンバ関数導入タイミング:次回「情報を読むだけの関数とは?」で扱う


🎬 締めの一言案

「プログラムもお店も、“誰でも触れる場所”と“触れちゃダメな場所”があるんです。
今日のゴールは、“商人の金庫に鍵をかけられるようになった” こと!」