使用GLIB写一个类
时间: 2023-09-01 10:10:47 浏览: 205
好的,以下是使用GLIB写一个简单的类的示例代码:
```c
#include <glib.h>
// 定义类的结构体
typedef struct _MyClass MyClass;
struct _MyClass {
GObject parent_instance;
// 添加类的成员变量
gchar *name;
};
// 定义类的虚函数
typedef struct _MyClassClass MyClassClass;
struct _MyClassClass {
GObjectClass parent_class;
};
// 定义类的类型宏
#define MY_TYPE_CLASS (my_class_class_get_type())
#define MY_TYPE (my_class_get_type())
// 声明类的函数
static void my_class_class_init(MyClassClass *klass);
static void my_class_init(MyClass *obj);
static void my_class_finalize(GObject *obj);
static void my_class_set_name(MyClass *self, const gchar *name);
static const gchar* my_class_get_name(MyClass *self);
// 注册类的函数
GType my_class_get_type(void) {
static GType type = 0;
if (type == 0) {
static const GTypeInfo type_info = {
sizeof(MyClassClass),
NULL, // base_init
NULL, // base_finalize
(GClassInitFunc) my_class_class_init,
NULL, // class_finalize
NULL, // class_data
sizeof(MyClass),
0, // n_preallocs
(GInstanceInitFunc) my_class_init,
NULL // value_table
};
type = g_type_register_static(G_TYPE_OBJECT, "MyClass", &type_info, 0);
}
return type;
}
// 类的实现
static void my_class_class_init(MyClassClass *klass) {
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
gobject_class->finalize = my_class_finalize;
}
static void my_class_init(MyClass *obj) {}
static void my_class_finalize(GObject *obj) {
MyClass *self = MY_CLASS(obj);
g_free(self->name);
G_OBJECT_CLASS(my_class_parent_class)->finalize(obj);
}
static void my_class_set_name(MyClass *self, const gchar *name) {
g_free(self->name);
self->name = g_strdup(name);
}
static const gchar* my_class_get_name(MyClass *self) {
return self->name;
}
// 使用类的示例
int main() {
MyClass *obj = g_object_new(MY_TYPE, NULL);
my_class_set_name(obj, "My Object");
g_print("Name: %s\n", my_class_get_name(obj));
g_object_unref(obj);
return 0;
}
```
上述代码实现了一个名为 `MyClass` 的类,具有一个 `name` 成员变量和对应的 `set_name()` 和 `get_name()` 成员函数。此外,还定义了一个 `MY_TYPE` 宏用于访问类的类型,并在 `main()` 函数中使用该类创建了一个对象并对其进行了操作。
阅读全文