復習 - 銀行口座マネージャー
CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 33/104。
チャレンジ
簡単この章で学んだすべてのクラスプロパティの概念、つまり getters と setters を備えた private メンバー、const メンバー関数、mutable メンバー、static 変数とメソッド、そして friend 関数を組み合わせた、完全な Bank Account Manager を構築しましょう。
コードを整理するために、次の2つのファイルを作成します。
BankAccount.h: 適切なカプセル化によって口座データを管理するBankAccountclass を Define します。class には次の要素を含めます。- Private メンバー:
accountNumber(string)、ownerName(string)、balance(double)、および残高が何回確認されたかを追跡するためのmutable int queryCount - 存在する口座数を追跡するための private static メンバー
totalAccounts - 口座番号、所有者名、初期残高を受け取る constructor。
queryCountを0に initialize し、totalAccountsを increment します - Const getters:
getAccountNumber()、getOwnerName()、getBalance()。残高 getter は呼び出されるたびにqueryCountを increment する必要があります - 残高が何回確認されたかを返す const getter
getQueryCount() - 金額が正の場合にのみ残高へ加算する
deposit(double amount)メソッド - 金額が正で、現在の残高を exceed しない場合にのみ残高から減算する
withdraw(double amount)メソッド - 作成された口座の総数を返す static メソッド
getTotalAccounts() - 口座間で資金を移動する friend 関数
transfer(BankAccount& from, BankAccount& to, double amount)を Declare します。金額が正で、送金元に十分な funds がある場合にのみ transfer する必要があります
class 定義の後で static メンバーと friend 関数を Define します。
- Private メンバー:
main.cpp: これらすべての機能が連携して動作することを示します。入力から2つの所有者名と2つの初期残高を読み取ります(合計4行: name1、balance1、name2、balance2)。その後、次の処理を行います。- 口座番号
"ACC001"と"ACC002"を持つ2つのBankAccountオブジェクトを Create します "Total accounts: <count>"を Print します- 最初の口座について
"<name>: $<balance>"を Print します - 2番目の口座について
"<name>: $<balance>"を Print します - 最初の口座に
500.0を Deposit します - 最初の口座について
"After deposit - <name>: $<balance>"を Print します - friend 関数を使用して、最初の口座から2番目の口座へ
300.0を Transfer します "After transfer:"を Print します- 最初の口座について
" <name>: $<balance>"を Print します - 2番目の口座について
" <name>: $<balance>"を Print します - 最初の口座について
"Query count for <name>: <count>"を Print します
- 口座番号
<iomanip> の std::fixed と std::setprecision(2) を使用して、すべての残高の値を小数点以下2桁で Format します。残高の入力は std::stod() を使用して string から double に Convert します。
header file の header guards を忘れずに記述し、必要な場所で <string> と <iostream> を include してください。
自分で試してみよう
#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: Print "Total accounts: <count>"
// TODO: 最初の口座について "<name>: $<balance>" を出力する
// TODO: 2番目の口座について "<name>: $<balance>" を出力する
// TODO: 最初の口座に 500.0 を入金する
// TODO: Print "After deposit - <name>: $<balance>" for the first account
// TODO: friend 関数を使って最初の口座から2番目の口座へ 300.0 を振り込む
// TODO: Print "After transfer:"
// TODO: 最初の口座について " <name>: $<balance>" を出力する(2スペースのインデントに注意)
// TODO: 2番目の口座について " <name>: $<balance>" を出力する(2スペースのインデントに注意)
// TODO: Print "Query count for <name>: <count>" for the first account
return 0;
}
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタパラメータ付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ徹底解説Rule of Three / Five / Zero復習 - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () の演算子オーバーロード型変換演算子復習 - Matrixクラス自分で練習してみよう: C++オンラインコンパイラ