CodeZine(コードジン)

特集ページ一覧

【第5回】委譲

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/12/25 11:00

目次

Cによる委譲の実現(2)

 これで、サービスステータスは一通り完成しました。

 次に、このServiceStatusクラスを使ってMemberクラスを拡張していきます。

リスト:4 Member.h 変更箇所(太字部分:追加・変更箇所)
...
/* Memberクラスの構造定義 */
#define INTERFACE_OF_MEMBER ¥
    INTERFACE_OF_USER              /* Userクラス構造定義の継承 */¥
    void* member_private_data;     /* カプセル化データ */¥
    int (*changeServiceStautsTo)(Member *self, char* new_staus); 
...

Member* Member_new(int id, char* name, char* status);
/* Memberオブジェクト生成 */
...
リスト5:Member.private.h 変更箇所(太字部分:追加・変更箇所)
#include "User.private.h"   /* Userクラスカプセル化領域の継承 */
#include "ServiceStatus.h" 

/* Memberクラス属性定義 */
struct _member_attribute {
    char* name;
    ServiceStatus* service_status;
};               

...

/* 初期化・終了処理 */
Member* Member_initialize(Member* self, int id, char* name, char* status);
void Member_finalize(Member* self);
リスト6:Member.c 変更箇所(太字部分:追加・変更箇所)
...
/* サービスステータス変更 */
static int Member_changeServiceStautsTo(Member *self, char* new_staus)
{
MEMBER_ATTRIBUTE(self)->service_status->changeServiceStautsTo(
MEMBER_ATTRIBUTE(self)->service_status,
new_staus
);
return 1;
}
/* Memberオブジェクト初期化処理 */ Member* Member_initialize(Member* self, int id, char* name, char* status) { User_initialize((User*)self, id); self->member_private_data = malloc(sizeof(struct _member_attribute)); MEMBER_ATTRIBUTE(self)->name = name; MEMBER_ATTRIBUTE(self)->service_status = ServiceStatus_new(status); self->action = Member_action; self->changeServiceStautsTo = Member_changeServiceStautsTo; return self; } /* Memberオブジェクト終了処理 */ void Member_finalize(Member* self) { ServiceStatus_delete(MEMBER_ATTRIBUTE(self)->service_status); free(MEMBER_ATTRIBUTE(self)); /* 属性構造体の解放 */ User_finalize((User*)self); /* 継承領域の終了処理 */ } /* Memberオブジェクト生成 */ Member* Member_new(int id, char* name, char* status) { Member* obj = (Member*)malloc(sizeof(Member)); return Member_initialize(obj, id, name, status); } ...

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Cでわかるオブジェクト指向

著者プロフィール

  • 島田 浩二(Ruby札幌)(シマダ コウジ)

    1978年生まれ。電気通信大学電気通信学部情報工学科卒業後、メーカ系ソフトウェア会社にて携帯電話の開発業務に従事した後、2006年より札幌にてフリーのプログラマとして活動。2009年7月に株式会社えにしテックを設立し、同社代表取締役に就任。 日本Rubyの会理事、一般社団法人LOCAL理事、Ru...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5