使用glib写一个demo,严格使用glib的面向对象规则
时间: 2023-07-20 07:17:22 浏览: 231
Manage C data using the GLib collections – IBM Developer.pdf
好的,下面是一个简单的使用 glib 的面向对象规则的 demo:
```c
#include <glib.h>
// 定义一个类
typedef struct _MyObject MyObject;
typedef struct _MyObjectClass MyObjectClass;
struct _MyObject {
GObject parent_instance;
guint count;
};
struct _MyObjectClass {
GObjectClass parent_class;
};
// 定义类的函数
static void my_object_class_init(MyObjectClass *klass);
static void my_object_init(MyObject *obj);
static void my_object_finalize(GObject *obj);
static void my_object_print_count(MyObject *obj);
// 定义类的类型
G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT);
// 类初始化函数
static void my_object_class_init(MyObjectClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
gobject_class->finalize = my_object_finalize;
}
// 对象初始化函数
static void my_object_init(MyObject *obj)
{
obj->count = 0;
}
// 对象销毁函数
static void my_object_finalize(GObject *obj)
{
G_OBJECT_CLASS(my_object_parent_class)->finalize(obj);
}
// 类的方法
static void my_object_print_count(MyObject *obj)
{
g_print("Count: %u\n", obj->count);
}
int main(int argc, char *argv[])
{
// 初始化 glib
g_type_init();
// 创建对象
MyObject *obj = g_object_new(MY_TYPE_OBJECT, NULL);
// 调用对象的方法
my_object_print_count(obj);
// 增加计数器
obj->count++;
// 再次调用对象的方法
my_object_print_count(obj);
// 销毁对象
g_object_unref(obj);
return 0;
}
```
这个 demo 定义了一个类 MyObject,它继承自 GObject 类,并且有一个 count 计数器。它的类方法只有一个打印计数器的函数,它的对象方法只有一个增加计数器的操作。我们创建了一个 MyObject 对象,调用了对象的方法,增加了计数器并再次调用了对象的方法,最后销毁了对象。这个 demo 严格使用了 glib 的面向对象规则,包括了类的定义、类型定义、类初始化函数、对象初始化函数、对象销毁函数和类的方法。
阅读全文