逆オブジェクト指向
C言語でインスタンス生成+カプセル化をそれっぽく。こんなことやるくらいならC++とかJavaとか使えって話なわけです。
#ifndef ITEM_H_ #define ITEM_H_ /* "public"ヘッダ item.h*/ /* ITEMという名前は使いたいが中のメンバにはアクセスさせたくないので */ typedef struct ITEM_TAG* ITEM; /* 公開関数 */ ITEM createItem(int, char*); void destoryItem(ITEM); void writeItem(ITEM); #endif /*ITEM_H_*/
/* プチオブジェクト指向→カプセル化 item.c*/ #include <stdio.h> #include "item.h" /* メンバ実装(ヘッダには書いていないのでprivate) */ struct ITEM_TAG{ int no; char* name; }; /* 関数実装 */ ITEM createItem(int no, char* name){ ITEM item = (ITEM)malloc(sizeof(struct ITEM_TAG)); item->no = no; item->name = name; /* ホントはmallocで確保しないとやばい? */ return item; } void destoryItem(ITEM item){ free(item); } void writeItem(ITEM item){ printf("NO:%d NAME:%s\n",item->no,item->name); } /* プライベートな関数はここ(含未公開ヘッダ)にstaticで書く */
/* メイン main.c*/ #include <stdio.h> #include "item.h" main(){ ITEM item = createItem(1,"バラ"); /* new ITEM(); */ writeItem(item); /* メソッド呼び出し */ destoryItem(item); /* 開放 */ }
参考: http://kmaebashi.com/programmer/c_yota/module.html