Menu
Coddy logo textTech

口座の実装

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

challenge icon

チャレンジ

簡単

これで Bank Account に命を吹き込みます!すでに account.h に公開インターフェースを作成しました。ここでは、それを動作させる隠れた内部処理を実装します。

これまでの作業を基に、秘密の struct 定義と実際の関数実装を含むソースファイルを追加します。ここでカプセル化が本格的に行われます。struct の本体は .c ファイル内にのみ存在し、ライブラリを使用する人からは完全に見えません。

3つのファイルを扱います。

  • account.h:不透明な Account 型の宣言と、create_account および destroy_account の関数プロトタイプを含む、既存のヘッダーファイルです。ACCOUNT_H による include ガードは維持してください。
  • account.c:ここで処理の本体を実装します。2つの非公開メンバー、int id(account の識別子)と double balance(新しい account では 0.0 から開始)を持つ実際の struct Account を定義します。メモリを確保し、パラメーターから ID を設定し、balance をゼロで初期化するコンストラクターを実装してください。メモリを適切に解放するデストラクターも実装してください。
  • main.c:account を作成し、正しく動作することを確認して実装をテストします。struct のメンバーは非公開なので内部を確認することはできませんが、ライフサイクルが正しく動作することは検証できます。

入力として1つの値、つまり新しい account に割り当てる account ID(整数)を受け取ります。

main ファイルで、入力された ID を使って account を作成し、ID を示す確認メッセージを出力してから account を破棄し、クリーンアップを確認してください。

次の形式で出力してください。

Account 1001 created
Account destroyed

ここで、1001 は入力として受け取った実際の ID に置き換えられます。

注意してください。main.c から account->idaccount->balance に直接アクセスすることはできません。これらのメンバーは account.c 内に完全に隠されています。今のところ、出力メッセージには入力された ID をそのまま使用します。今後のレッスンでは、隠されたデータを適切に取得するための getter 関数を追加します。

自分で試してみよう

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    // TODO: 入力から account_id を読み取る
    scanf("%d", &account_id);

    // TODO: create_account() を使ってアカウントを作成し "Account <id> created" を出力する

    // TODO: destroy the account using destroy_account() and print "Account destroyed"

    return 0;
}

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

自分で練習してみよう: Cオンラインコンパイラ