Menu
Coddy logo textTech

残高の取得

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

challenge icon

チャレンジ

簡単

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_balance function を Implement します。この function は account の非公開の balance フィールドを単純に返します。この function が内部データにアクセスできるのは、struct と同じファイルで定義されているためです。外部コードからは、依然として内部を直接見ることはできません。
  • main.c: これで、account の内部で何が起きているかをようやく確認できます!account を作成し、いくつかの取引を実行して、新しい getter を使い各段階で balance を表示します。

4つの入力を受け取ります。account ID(整数)、deposit amountwithdrawal 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オンラインコンパイラ