Menu
Coddy logo textTech

まとめ:銀行口座マネージャー

CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 33/104。

challenge icon

チャレンジ

簡単

この章で学んだクラスのプロパティに関するすべての概念(プライベートメンバとゲッター/セッター、constメンバ関数、mutableメンバ、静的変数とメソッド、そしてフレンド関数)を統合した、完全な銀行口座マネージャーを構築しましょう。

コードを整理するために、2つのファイルを作成します。

  • BankAccount.h: 適切なカプセル化を用いて口座データを管理する BankAccount クラスを定義します。クラスには以下のものを含めてください:
    • プライベートメンバ: accountNumber (string)、ownerName (string)、balance (double)、および残高が何回確認されたかを追跡するための mutable int queryCount
    • プライベートな静的メンバ totalAccounts: 存在する口座の総数を追跡します
    • コンストラクタ: 口座番号、所有者名、初期残高を受け取ります。queryCount0 に初期化し、totalAccounts をインクリメントする必要があります
    • Const ゲッター: getAccountNumber()getOwnerName()、および getBalance()。残高のゲッターは、呼び出されるたびに queryCount をインクリメントする必要があります
    • Const ゲッター getQueryCount(): 残高が何回確認されたかを返します
    • deposit(double amount) メソッド: 金額が正の場合のみ残高に加算します
    • withdraw(double amount) メソッド: 金額が正であり、かつ現在の残高を超えない場合のみ残高から減算します
    • 静的メソッド getTotalAccounts(): 作成された口座の総数を返します
    • フレンド関数 transfer(BankAccount& from, BankAccount& to, double amount) の宣言: 口座間で資金を移動させます。金額が正であり、かつ送金元に十分な資金がある場合のみ転送を行う必要があります

    クラス定義の後に、静的メンバとフレンド関数を定義してください。

  • main.cpp: これらすべての機能が連携して動作することを示します。入力から2つの所有者名と2つの初期残高を読み取り(計4行:name1、balance1、name2、balance2)、以下の処理を行います:
    • 口座番号 "ACC001""ACC002" を持つ2つの BankAccount オブジェクトを作成します
    • "Total accounts: <count>" と出力します
    • 1つ目の口座について "<name>: ": $"lt;balance>" と出力します
    • 2つ目の口座について "<name>: ": $"lt;balance>" と出力します
    • 1つ目の口座に 500.0 を預け入れ(deposit)ます
    • 1つ目の口座について "After deposit - <name>: "After deposit - : $"lt;balance>" と出力します
    • フレンド関数を使用して、1つ目の口座から2つ目の口座へ 300.0 を転送(transfer)します
    • "After transfer:" と出力します
    • 1つ目の口座について " <name>: " : $"lt;balance>" と出力します
    • 2つ目の口座について " <name>: " : $"lt;balance>" と出力します
    • 1つ目の口座について "Query count for <name>: <count>" と出力します

すべての残高の値は、<iomanip>std::fixedstd::setprecision(2) を使用して、小数点以下2桁でフォーマットしてください。入力された残高の文字列から double への変換には std::stod() を使用してください。

ヘッダーファイルにはインクルードガードを忘れずに、また必要に応じて <string><iostream> をインクルードしてください。

自分で試してみよう

#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"

int main() {
    // 入力を読み込む
    std::string name1, name2;
    std::string balance1Str, balance2Str;
    
    std::getline(std::cin, name1);
    std::getline(std::cin, balance1Str);
    std::getline(std::cin, name2);
    std::getline(std::cin, balance2Str);
    
    double balance1 = std::stod(balance1Str);
    double balance2 = std::stod(balance2Str);
    
    // 出力を小数点以下2桁にフォーマットする
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: 口座番号 "ACC001" と "ACC002" を持つ2つの BankAccount オブジェクトを作成する
    
    // TODO: "Total accounts: <count>" を出力する
    
    // TODO: 1つ目の口座について "<name>: $<balance>" を出力する
    
    // TODO: 2つ目の口座について "<name>: $<balance>" を出力する
    
    // TODO: 1つ目の口座に 500.0 を預け入れる
    
    // TODO: 1つ目の口座について "After deposit - <name>: $<balance>" を出力する
    
    // TODO: friend 関数を使用して、1つ目の口座から2つ目の口座へ 300.0 を送金する
    
    // TODO: "After transfer:" を出力する
    
    // TODO: 1つ目の口座について "  <name>: $<balance>" を出力する(2マスのインデントに注意)
    
    // TODO: 2つ目の口座について "  <name>: $<balance>" を出力する(2マスのインデントに注意)
    
    // TODO: 1つ目の口座について "Query count for <name>: <count>" を出力する
    
    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン