口座の実装
CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 23/61。
チャレンジ
簡単これで 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->id や account->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オンラインコンパイラ