残高の取得
CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 26/61。
チャレンジ
簡単Your Bank Account はほぼ完成です!account の作成、資金の deposit、資金の withdraw を行う機能を構築しましたが、重要な部分が1つ欠けています。現在、外部コードから現在の残高を見る方法がありません。getter function を追加してこれを解決しましょう。
getter は、カプセル化されたモジュール内の非公開データを公開する適切な方法です。balance フィールドを public にする(カプセル化が壊れてしまいます)のではなく、値を返す読み取り専用の function を提供します。これにより、データを保護したまま、制御されたアクセスを許可できます。
引き続き、次の3つのファイルを使って作業します。
account.h: 新しい function prototype、get_balanceを Add します。この function はデータを読み取るだけで変更はしないため、const Account *を受け取り、現在の balance を表すdoubleを返します。既存の宣言はすべて残してください。account.c:get_balancefunction を Implement します。この function は account の非公開の balance フィールドを単純に返します。この function が内部データにアクセスできるのは、struct と同じファイルで定義されているためです。外部コードからは、依然として内部を直接見ることはできません。main.c: これで、account の内部で何が起きているかをようやく確認できます!account を作成し、いくつかの取引を実行して、新しい getter を使い各段階で balance を表示します。
4つの入力を受け取ります。account ID(整数)、deposit amount、withdrawal amount、およびsecond deposit amountです。
main ファイルで account を作成し、初期 balance(0.00 になるはずです)を Print します。最初の金額を deposit して、新しい balance を Print します。指定された金額を withdraw して、再び balance を Print します。最後に2回目の deposit を行い、最終的な balance を Print します。その後、account を破棄します。
出力は次の形式で Print してください。
Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyedここで、1001 は account ID であり、balance は初期値(0.00)、500.00 を deposit した後、300.00 を withdraw した後、さらに150.00を deposit した後の値を反映しています。すべての balance の値は、%.2f を使って小数点以下2桁でフォーマットしてください。
この getter により、Your Bank Account モジュールは account データへの完全で制御されたアクセスを提供できるようになりました。ユーザーは balance を確認できますが、変更できるのは検証済みの deposit および withdraw function を通じてのみです。
自分で試してみよう
#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;
}オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ