====== 🎓 第3章 オブジェクトの状態を変える:BankAccountクラス ======
===== 🏁 学習目標 =====
* クラスの内部データ(メンバ変数)を「操作する」メンバ関数を作る
* コンストラクタと中かっこ ''{ }'' 初期化を復習する
* if文を使って、条件に応じて動作を変えるロジックを学ぶ
----
===== 💬 クラスで「状態を持つ」とは? =====
クラスは、**自分だけのデータ(状態)** を持つことができます。
たとえば「銀行口座」を考えると、**残高(balance)** があり、
それを **増やしたり減らしたり** する操作が必要です。
これをオブジェクトで表すと、こんなイメージになります。
BankAccount myAccount
├─ name = "山田"
├─ balance = 10000
├─ deposit() → 残高を増やす
└─ withdraw() → 残高を減らす
----
===== 🧮 例題:BankAccountクラス =====
**目的:** クラスの内部データを、メンバ関数で操作してみよう。
#include
#include
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)'' キャストを試してもよい。
----
===== 🎯 まとめ =====
|<45% 50% 50% >|
^ 覚えるポイント ^ 内容 ^
| オブジェクトの「状態」 | メンバ変数に保存されるデータ |
| 状態を変える関数 | メンバ関数内で変数を書き換える |
| ''if'' 文 | 条件によって動作を分ける |
| 丸かっこ/中かっこ初期化 | どちらもOK。中かっこは統一初期化 |
| クラスの使い方 | 設計(定義) → 生成 → 操作 |
----
📘 **次回のステップ**
→ 第4章では「Vector2Dクラス」を作り、2次元の位置や長さなどの**計算を行うメソッド**を学びます。