🎓 第3章 オブジェクトの状態を変える:BankAccountクラス

  • クラスの内部データ(メンバ変数)を「操作する」メンバ関数を作る
  • コンストラクタと中かっこ { } 初期化を復習する
  • if文を使って、条件に応じて動作を変えるロジックを学ぶ

クラスは、自分だけのデータ(状態) を持つことができます。 たとえば「銀行口座」を考えると、残高(balance) があり、 それを 増やしたり減らしたり する操作が必要です。

これをオブジェクトで表すと、こんなイメージになります。

BankAccount myAccount
  ├─ name = "山田"
  ├─ balance = 10000
  ├─ deposit() → 残高を増やす
  └─ withdraw() → 残高を減らす

目的: クラスの内部データを、メンバ関数で操作してみよう。

#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)

それぞれの口座(オブジェクト)は、自分だけの残高(状態) を持っています。


口座に金利をつける機能を追加しよう。

次の仕様でクラスを完成させよ。

// クラス名: 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次元の位置や長さなどの計算を行うメソッドを学びます。

  • game-engineer/classes/2025/game-development-1/no-08-3.txt
  • 最終更新: 3カ月前
  • by root