Gobject:用C实现C++中的类

1. 类的声明和定义:

// 声明
typedef struct _MyObjectClass {
           GObjectClass parent_class;
   } MyObjectClass;
   // 定义
   typedef struct _MyObject{
       GObject parent_instance;
} MyObject;
 
typedef struct _MyObjectClass {
        GObjectClass parent_class;
} MyObjectClass;
// MyObject当前的类,my_object前缀,G_TYPE_OBJECT父类
G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT);

GObject 中的『类结构体』的作用是面向 GObject 类型系统声明一个『类』的类型,GObject 的『类结构体』通常需要从一个叫做 GObjectClass 的『类结构体』派生而成

2.成员变量/函数

声明变量:init函数安装g_object_class_install_property+枚举
获取/设置属性值:g_object_set/get_property
链接:[实现方法](https://blog.csdn.net/acs713/article/details/7644476)
声明函数:函数严格根据继承的父类设置

3. 构造函数

类的构造函数:
class_init: 成员函数的注册
_init:成员变量的注册

4. 析构函数

理解循环引用:ref/unref
调用父类的析构:G_OBJECT_CLASS (parent_class)

5. 常用宏

#define MY_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE(my_obj, my_object_get_type()))
[用C++类比](https://segmentfault.com/a/1190000003861212)
#define BOY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),BOY_TYPE,Boy))
[Gobject对象强制转换为Boy对象](https://www.ibm.com/developerworks/cn/linux/l-gobject/)
[理解xxx_get_type](https://blog.csdn.net/weixin_41944449/article/details/81257259)

6. 创建对象

PMDList *list = g_object_new (PM_TYPE_DLIST,
                              "head", NULL,
                              "tail", NULL,
                              NULL);/* 要记得键值对参数之后,要以 NULL 收尾 */

7. 状态迁移

null->ready分配资源,
null->ready向上通知
ready->NULL向下通知

8. 继承机制

结构体之间的截取

参考链接

https://blog.csdn.net/yanbixing123/article/details/52970925 [C++理解Gobject]
http://garfileo.is-programmer.com/2011/7/14/gobject-notes.27977.html [系统学习GObject]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值