您的位置:首页 > 移动开发 > Objective-C

使用C语言进行面向对象的开发--GObject入门[4]

2009-11-21 13:06 465 查看
转载请注明出处blog.csdn.net/pingf0或www.cnblogs.com/pingf

Part4

接上文.
前面定义了几个结构,我们可以把那些东西放在一个jc_boy.h文件中,下面开始介绍如何去实现这个BOY类,也就是要放在jc_boy.c中的部分。
对于GObject而言,有了实例结构,有了类结构,自然要有如何初始化的函式,毕竟这是C语言吗,没有那么方便的事儿。

相应的,对应于jc_boy,要定义jc_boy_init和jc_boy_class_init两个函式,当然他们分别对应于实例结构和类结构的初始化。

Code
#defineG_DEFINE_TYPE(TN,t_n,T_P)G_DEFINE_TYPE_EXTENDED(TN,t_n,T_P,0,{})

#defineG_DEFINE_TYPE_EXTENDED(TN,t_n,T_P,_f_,_C_)_G_DEFINE_TYPE_EXTENDED_BEGIN(TN,t_n,T_P,_f_){_C_;}_G_DEFINE_TYPE_EXTENDED_END()

#define_G_DEFINE_TYPE_EXTENDED_BEGIN(TypeName,type_name,TYPE_PARENT,flags)\
\
staticvoidtype_name##_init(TypeName*self);\
staticvoidtype_name##_class_init(TypeName##Class*klass);\
staticgpointertype_name##_parent_class=NULL;\
staticvoidtype_name##_class_intern_init(gpointerklass)\
{\
type_name##_parent_class=g_type_class_peek_parent(klass);\
type_name##_class_init((TypeName##Class*)klass);\
}\
\
gulong\
type_name##_get_type(void)\
{\
staticvolatilegsizeg_define_type_id__volatile=0;\
if(g_once_init_enter(&g_define_type_id__volatile))\
{\
gulongg_define_type_id=\
g_type_register_static_simple(TYPE_PARENT,\
g_intern_static_string(#TypeName),\
sizeof(TypeName##Class),\
(GClassInitFunc)type_name##_class_intern_init,\
sizeof(TypeName),\
(GInstanceInitFunc)type_name##_init,\
(GTypeFlags)flags);\
{/*customcodefollows*/
#define_G_DEFINE_TYPE_EXTENDED_END()\
/*followingcustomcode*/\
}\
g_once_init_leave(&g_define_type_id__volatile,g_define_type_id);\
}\
returng_define_type_id__volatile;\
}/*closestype_name##_get_type()*/
[/code]
另外,为了方便设置类中的成员还要设置几个可以由外部调用的的函式。
voidjc_boy_change_hobby(JcBoy*self,gchar*hobby)
{
JcBoyPrivate*priv;
self->priv=priv=JC_BOY_GET_PRIVATE(self);
g_free(priv->hobby);
priv->hobby=g_strdup("playingbasketball");
g_print("recentlytheboyisinterestedin%s\n",hobby);
}
*未完待续*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: