🎓 第3章 オブジェクトの状態を変える:BankAccountクラス
🏁 学習目標
- クラスの内部データ(メンバ変数)を「操作する」メンバ関数を作る
- コンストラクタと中かっこ
{ }初期化を復習する - if文を使って、条件に応じて動作を変えるロジックを学ぶ
💬 クラスで「状態を持つ」とは?
クラスは、自分だけのデータ(状態) を持つことができます。 たとえば「銀行口座」を考えると、残高(balance) があり、 それを 増やしたり減らしたり する操作が必要です。
これをオブジェクトで表すと、こんなイメージになります。
BankAccount myAccount ├─ name = "山田" ├─ balance = 10000 ├─ deposit() → 残高を増やす └─ withdraw() → 残高を減らす
🧮 例題:BankAccountクラス
目的: クラスの内部データを、メンバ関数で操作してみよう。
#include <iostream> #include <string> using namespace std; class BankAccount { public: string name; int balance; // コンストラクタ BankAccount(string n, int b) { name = n; balance = b; } // 残高を表示 void show() { cout << name << " さんの残高は " << balance << " 円です。" << endl; } // 入金 void deposit(int yen) { balance += yen; cout << yen << " 円を入金しました。" << endl; } // 出金(残高チェック付き) void withdraw(int yen) { if (yen > balance) { cout << "残高不足です。" << endl; } else { balance -= yen; cout << yen << " 円を出金しました。" << endl; } } }; int main() { // (1)丸かっこ初期化 BankAccount a("山田", 10000); // (2)中かっこ { } 初期化(統一初期化) BankAccount b{"佐藤", 5000}; a.show(); a.deposit(2000); a.withdraw(5000); a.show(); cout << endl; b.show(); b.withdraw(8000); // 残高不足の例 b.deposit(3000); b.show(); }
実行結果
山田 さんの残高は 10000 円です。 2000 円を入金しました。 5000 円を出金しました。 山田 さんの残高は 7000 円です。 佐藤 さんの残高は 5000 円です。 残高不足です。 3000 円を入金しました。 佐藤 さんの残高は 8000 円です。
ポイント
deposit()で内部の変数balanceを直接操作できる。withdraw()は条件を確認してから残高を減らす。- 丸かっこ
()と中かっこ{ }の初期化、どちらでもOK。
🔍 イメージ図
BankAccount a ├─ name = "山田" ├─ balance = 7000 ├─ deposit(2000) └─ withdraw(5000)
それぞれの口座(オブジェクト)は、自分だけの残高(状態) を持っています。
🧩 練習問題(第3問)
口座に金利をつける機能を追加しよう。
次の仕様でクラスを完成させよ。
// クラス名: BankAccount // - メンバ変数: name, balance // - コンストラクタ: 名前と初期残高を設定 // - メンバ関数: // 1. deposit(int yen) … 入金 // 2. withdraw(int yen) … 出金(残高不足なら警告) // 3. addInterest(double rate) … 金利を適用する(例:rate=0.05 → 残高×1.05) // 4. show() … 現在の残高を表示 // // main()で以下の動作を確認せよ: // ・口座を2つ作る(丸かっこ版と中かっこ版で) // ・入金・出金・金利加算を実行する // // 出力例: // 山田 さんの残高は 10000 円です。 // 2000 円を入金しました。 // 金利 5% を適用しました。 // 山田 さんの残高は 12600 円です。
ヒント
balance = balance * (1 + rate);で金利を加算できる。- 小数を扱うので
doubleを使う。 - 結果を
intに丸めたいときは(int)キャストを試してもよい。
🎯 まとめ
| 覚えるポイント | 内容 |
|---|---|
| オブジェクトの「状態」 | メンバ変数に保存されるデータ |
| 状態を変える関数 | メンバ関数内で変数を書き換える |
if 文 | 条件によって動作を分ける |
| 丸かっこ/中かっこ初期化 | どちらもOK。中かっこは統一初期化 |
| クラスの使い方 | 設計(定義) → 生成 → 操作 |
📘 次回のステップ → 第4章では「Vector2Dクラス」を作り、2次元の位置や長さなどの計算を行うメソッドを学びます。