残高の取得
CoddyのCジャーニー「Object Oriented Programming」セクションの一部 — レッスン 26/61。
チャレンジ
簡単あなたの銀行口座モジュールはほぼ完成です!口座の作成、資金の入金、そして出金の機能を作成しましたが、1つ重要な要素が欠けています。現時点では、外部のコードから現在の残高を確認する方法がありません。ゲッター関数を追加して、これを解決しましょう。
ゲッターは、カプセル化されたモジュール内の隠されたデータを公開するための適切な方法です。残高(balance)フィールドを公開(パブリックに)するのではなく(これはカプセル化を壊してしまいます)、値を返す読み取り専用の関数を提供します。これにより、制御されたアクセスを許可しながら、データを保護し続けることができます。
引き続き、以下の3つのファイルを編集します:
account.h: 新しい関数プロトタイプget_balanceを追加します。この関数はconst Account *を引数に取り(データを読み取るだけで変更しないため)、現在の残高を表すdouble型を返します。既存の宣言はすべて保持してください。account.c:get_balance関数を実装します。これは単に口座の隠された balance フィールドを返します。この関数は構造体と同じファイルで定義されているため、内部データにアクセスできることに注目してください。外部のコードは依然として内部を直接覗き見ることはできません。main.c: これでようやく口座の中で何が起きているかを確認できます!口座を作成し、いくつかの取引を行い、新しいゲッターを使用して各ステップでの残高を表示してください。
4つの入力を受け取ります:口座ID(整数)、入金額、出金額、そして2回目の入金額です。
メインファイルで口座を作成し、初期残高(0.00であるはずです)を表示します。最初の金額を入金し、新しい残高を表示します。指定された金額を出金し、再び残高を表示します。最後に、2回目の入金を行い、最終的な残高を表示します。その後、口座を破棄してください。
出力は以下の形式で表示してください:
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedここで 1001 は口座IDであり、残高はそれぞれ、初期状態(0.00)、500.00の入金後、300.00の出金後、そしてさらに150.00を入金した後の状態を反映しています。すべての残高の値は %.2f を使用して小数点以下2桁でフォーマットしてください。
このゲッターを導入することで、銀行口座モジュールは口座データへの完全かつ制御されたアクセスを提供できるようになります。ユーザーは残高を確認できますが、変更は検証済みの入金(deposit)および出金(withdraw)関数を通じてのみ行うことができます。
自分で試してみよう
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
double deposit1;
scanf("%lf", &deposit1);
double withdraw_amount;
scanf("%lf", &withdraw_amount);
double deposit2;
scanf("%lf", &deposit2);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
// TODO: get_balanceを使用して初期残高を表示する
deposit(account, deposit1);
// TODO: 初回の入金後の残高を表示する
withdraw(account, withdraw_amount);
// TODO: 出金後の残高を表示する
deposit(account, deposit2);
// TODO: 2回目の入金後の残高を表示する
destroy_account(account);
printf("Account destroyed\n");
return 0;
}