オブジェクト向けC言語フレームワーク

2260 ワード

プログラミングを学ぶことからずっと対象に向かって、継承して、多態などの思想を灌
ここ数日偶然、軽量級のオブジェクト向けCプログラミングフレームワークLW_を見かけました.OOPCは,著者らがマクロ定義によりオブジェクト向けプログラミングのいくつかのツールをカプセル化し,クラスの指定,継承,言い訳などを容易にするために用いることができる.
まず、ダウンロードフレームワークは私たちのプロジェクト(lw_oopc.hとlw_oopc.cの2つのファイル)に含まれています.次に、抽象クラスPeopleとFriendクラス、friendに置くインタフェースを定義します.hヘッダファイルに
#ifndef __FRIEND_H
#define __FRIEND_H

/*
 *  friend.h
 */

#include "lw_oopc.h"

INTERFACE(ICall)
{
	void (*call)(ICall *ic);
};

ABS_CLASS(People)
{
	char name[100];
	int  age;
	
	void (*say)(People* p,const char *word);
	void (*init)(People* p,const char* name,int age);
};

CLASS(Friend)
{
	EXTENDS(People);
	IMPLEMENTS(ICall);
	
	int tel;
	
	void (*init)(Friend* f,const char* name,int age,int tel);
};

#endif

クラスの宣言は簡単で、主にC++のクラスの宣言構文の代わりにフレームワークで定義されたいくつかのマクロを使用し、次にクラスのメンバー関数の定義をfriendに置きます.cソースファイル
/*
 *  friend.c
 */

#include "friend.h"

void People_Say(People* p,const char* word)
{
	printf("%s¥n",word);
}

void People_Init(People* p,const char* name,int age)
{
	strcpy(p->name,name);
	p->age = age;
}

ABS_CTOR(People)
FUNCTION_SETTING(say,People_Say);
FUNCTION_SETTING(init,People_Init);
END_ABS_CTOR

void Friend_Init(Friend* f,const char *name,int age,int tel)
{
	People *p = SUPER_PTR(f,People);
	People_Init(p,name,age);
	f->tel = tel;
}

void Friend_Call(Friend* f)
{
	printf("Hello Friend");
}

CTOR(Friend)
SUPER_CTOR(People);
FUNCTION_SETTING(init,Friend_Init);
FUNCTION_SETTING(ICall.call,Friend_Call);
END_CTOR

最後に私たちのテストmainです.c
#include <stdio.h>
#include "lw_oopc.h"
#include "friend.h"


int main (int argc, const char * argv[]) {
    // insert code here...
    
	Friend* f = Friend_new();
	f->init(f,"penjin",25,1590000000);
	
	People* p = SUPER_PTR(f,People);
	printf("Friend'name is %s and age is %d and tel number is %d¥n",p->name,p->age,f->tel);
	
	ICall* ic = SUPER_PTR(f,ICall);
	ic->call(f);
	
	lw_oopc_delete(f);
	
	lw_oopc_report();
    return 0;
}
出力結果Friend'name is penjin and age is 25 and tel number is 159億円Hello Friend
使うのは比较的に便利で简単で、将来もしCのオブジェクト向けのプログラミングを実现したいならば、このフレームワークは悪くない选択で、ほほほ