Menu
Coddy logo textTech

口座の実装

CoddyのCジャーニー「Object Oriented Programming」セクションの一部 — レッスン 23/61。

challenge icon

チャレンジ

簡単

さあ、銀行口座(Bank Account)に命を吹き込む時が来ました!すでに account.h でパブリックインターフェースを作成しましたが、次はそれを機能させるための隠された内部構造を実装します。

これまでの作業をベースに、秘密の構造体定義と実際の関数実装を含むソースファイルを追加します。これこそがカプセル化の真髄です。構造体の本体は .c ファイル内にのみ存在し、ライブラリを使用する人からは完全に見えなくなります。

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

  • account.h: 不透明な Account 型の宣言と、create_account および destroy_account の関数プロトタイプが含まれる既存のヘッダーです。ACCOUNT_H によるインクルードガードを維持してください。
  • account.c: ここで魔法が起こります。2つの隠しメンバを持つ実際の struct Account を定義します:int id(口座識別子)と double balance(新規口座の場合は 0.0 から開始)。メモリを割り当て、パラメータから ID を設定し、残高をゼロに初期化するコンストラクタを実装してください。また、メモリを適切に解放するデストラクタを実装してください。
  • main.c: 口座を作成し、正しく動作することを確認して実装をテストします。構造体のメンバは隠されているため、中を覗き見ることはできませんが、ライフサイクルが正しく機能しているかを確認できます。

1つの入力を受け取ります:新しい口座に割り当てる account ID(整数)です。

メインファイルで、提供された ID を使用して口座を作成し、その ID を示す確認メッセージを表示した後、口座を破棄してクリーンアップを確認してください。

出力は以下の形式で表示してください:

Account 1001 created
Account destroyed

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

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

自分で試してみよう

#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_account() を使用してアカウントを破棄し、"Account destroyed" と出力する

    return 0;
}

Object Oriented Programmingのすべてのレッスン