使用C语言进行面向对象的开发--GObject入门[7]
来源:互联网 发布:淘宝售后多长时间 编辑:程序博客网 时间:2024/06/05 13:32
转自: blog.csdn.net/pingf0 或www.cnblogs.com/pingf
Part 7
接上文
其实关于GObject中对象的构造,继承,方法的重载,在前面的几部份中都已经介绍。这一部分仅仅是为了补充些琐碎的知识,
而不会涉及信号啊,属性啊,接口啊。。。不拉不拉。。。
链上/溯回
官方的GObject tutorial中有这么一章节,叫chaining up,猛一看以为是“拴住”的意思,后来看了内容,不能当词组理解,姑且这样翻译了。
其实里面讲的东西就那么一点,就是怎么使用“链”【chaining】【也就是继承关系链】上游定义的东西。多用于方法的重载。
其实用的最多的就是实例类型的转换以及获取父类结构的这个函式了g_type_class_peek_parent
。
一个例子,假设b继承自a,要在a的某个方法之上重新实现这个方法。
static voidb_method_to_call (B *obj, int a){ BClass *klass; AClass *parent_class; klass = B_GET_CLASS (obj); parent_class = g_type_class_peek_parent (klass); /* do stuff before chain up */ parent_class->method_to_call (obj, a); /* do stuff after chain up */}
类的构造
其实前文已经说过了
调用时间
调用函式
批注
第一次调用某个对象
对象的base_init 函式
见过一些例子把信号和一些定义在这里,感觉一般用不到
对象的class_init 函式
这个不用说了吧
接口的base_init 函式
这个后文介绍
接口的interface_init 函式
见后文
对象实例化【每次 g_object_new
调用】
调用对象的“构造”函式GObjectClass->constructor
按照tutorial所述,仅仅是根据属性改变某些状态时调用此函式。
比如如果某个属性为**时,print该属性的值。另外如果override此函式,必须先chaining up父类的“构造”函式。不过一般不用,官方的tutorial也有这么一句In doubt, do not override the constructor method.如果非要与一般类的构造函式对应,个人感觉如果非要对应的话,**_init和**_class_init更为合适。
对象实例化instance_init函式调用
这个前文说的够多了
类的析构
调用时间
调用函式
批注
最后一次对类别进行
g_object_unref
类型的 dispose函式
前文说的很多了
类型的 finalize函式
见前文
最后一次对类别进行
g_object_unref
并且这是该类别的最后一个实例
接口的interface_finalize 函式
“ 实际中很少使用,除非你特别需要”官方文档就是这么说滴。。。orz
接口的base_finalize 函式
类型的 class_finalize 函式
类型的 base_finalize 函式
截止到此,关于GObject基本的使用都以介绍,后文中将会集中介绍信号,属性及接口,并在最后给出一个完整的带有接口,信号和属性的实例。另外在此处给出一些链接,方便大家对比着学习。
1.http://www.ibm.com/developerworks/cn/linux/l-gobject/index.html
这是比较早期的一份资料,也是本人最初的参考。由乡村小学教师宋国伟先生编写。
文章条例比较清晰,富有完整的代码。但是实例命名方式不是很规范。而比较常用的接口也没有详细介绍。
为了保持统一,本人举例的类也用了类似的boy,man的定义。
2. http://imtx.cn/tag/manual/
ubuntu tweak ui的作者翻译的GObject manual,还不错。但是更多是翻译,实例还是有些缺乏【因为mannual本身给的例子就不多,而且不够完整】
3. http://code.google.com/p/wallpaper-expert/w/list这是google wallpaper上对gtk mail archive上关于gobject的一些翻译,排版很好,颜色丰富。
里面关于属性部分的介绍还是相当不错的,推荐下。
只是还是没有介绍接口,并且实例似乎不够完整【就是没有直接可以使用的例子】
4.还有就是官方的文档了,除了GObject的mannual,还可以看下gtk的manual,clutter的mannual,里面都有使用GObject声明一个类的介绍。
- 使用C语言进行面向对象的开发--GObject入门[7]
- 使用C语言进行面向对象的开发--GObject入门[1] [2]
- 使用C语言进行面向对象的开发--GObject入门[1]
- 使用C语言进行面向对象的开发--GObject入门[2]
- 使用C语言进行面向对象的开发--GObject入门[3]
- 使用C语言进行面向对象的开发--GObject入门[4]
- 使用C语言进行面向对象的开发--GObject入门[5]
- 使用C语言进行面向对象的开发--GObject入门[6]
- 使用C语言进行面向对象的开发--GObject入门[8]
- 使用C语言进行面向对象的开发--GObject入门[9]
- GObject参考手册(10)--GObject的对象属性
- GObject参考手册(2)--概念:GObject的开发背景
- 使用面向对象工具进行着面向过程的开发
- 用C语言进行面向对象编程
- 用C语言进行面向对象编程
- 用C语言进行面向对象编程
- C语言的面向对象
- 面向对象的c语言
- 31. Next Permutation
- 百度地图定位之获取所在城市
- 翻转链表
- Node.js 异步异常的处理与domain模块解析
- Ubuntu通过apt-get install安装mysql后pdo_mysql无法连接的解决方法
- 使用C语言进行面向对象的开发--GObject入门[7]
- 1613-3-傅溥衍 总结《2016年10月18日》【连续第十八天总结】
- iOS下ffmepg开发的一些参考资料汇总
- 让你的Mac不在依赖于ssh软件
- RPC
- error 502 in ngin php5-fpm
- achartengine画趋势图
- Join操作基本及区别:外连接、自然连接、内连接
- Leetcode 325. Maximum Size Subarray Sum Equals k (Medium) (cpp)