GObject学习教程---第三章:子类对象的私有属性模拟

GLib GObject对象系统 在前面的文章中,我们学习了GTK4的自定义控件开发。通过继承GtkWidget,可以创建功能完整的自定义控件。但自定义控件背后的机制是什么?GTK4的控件系统如何实现类型安全、信号通信和属性管理?答案就是GObject。GObject是GTK的对象系统基础面向对象:在C语言中实现类、继承、接口类型系统:动态类型注册和查询信号机制:观察者模式的完整实现属性系统:自动化的getter/setter和通知机制// 枚举属性IDenum {PROP_NAME,N_PROPS// 安装属性。 阅读详情

索引:https://blog.youkuaiyun.com/knowledgebao/article/details/84633798

本文是学习学习他人的博客的心得(具体详见“楼主见解”),如果源网站可访问的话,建议直接访问源网站:

楼主见解:

主要讲解如何访问类的私有成员变量,增加PM_DLIST_GET_PRIVATE宏,通过此宏来访问类的私有成员变量。

要实现此功能,需要2步,

第一:定义PM_DLIST_GET_PRIVATE宏

第二:在class_init中,注册私有变量。

1: .h的实现

#ifndef PM_DLIST_H
#define PM_DLIST_H
  
/*必须包含的基类头文件*/
#include <glib-object.h>
  
/*定义子类类型,其中pm_dist字段是用户可以修改的内容,表示这个类的用途,后续所有的函数都必须以pm_dist开头,pm_dlist_get_type ()函数在下边定义*/
#define PM_TYPE_DLIST (pm_dlist_get_type ())
  

/*实例结构体,类似于C++中实例化时,每个实例独有的内容,比如成员函数,成员变量等*/
typedef struct _PMDList PMDList;
struct  _PMDList {
        GObject parent_instance;
};
  
/*类结构体,类似于C++中,属于类的部分,比如:static成员函数和static成员变量等*/
typedef struct _PMDListClass PMDListClass;
struct _PMDListClass {
        GObjectClass parent_class;
};
  
/*privae,定义获取类型函数,供PM_TYPE_DLIST调用,不建议直接调用*/
GType pm_dlist_get_type (void);
  
#endif

2:.c的实现

#include "pm-dlist.h"
 
/*此宏有三个功能:
1,函数GType pm_dlist_get_type (void)的实现,GObject帮我们具体实现
2,注册函数前缀pm_dlist到GObject
3,注册实例结构体名称PMDList到GObject
通过此宏的调用,GObject知道了我们的三个信息:类型,类名称,函数前缀
*/
G_DEFINE_TYPE (PMDList, pm_dlist, G_TYPE_OBJECT);

/*
将私有成员PMDListPrivate注册到GObject中,后续通过宏PM_DLIST_GET_PRIVATE作为获取私有成员变量的唯一入口,如果需要生效,需要在class_init中注册此变量
*/
#define PM_DLIST_GET_PRIVATE(obj) (\
        G_TYPE_INSTANCE_GET_PRIVATE ((obj), PM_TYPE_DLIST, PMDListPrivate))

/*普通结构体,作为实例结构体的私有成员*/ 
typedef struct _PMDListNode PMDListNode;
struct  _PMDListNode {
        PMDListNode *prev;
        PMDListNode *next;
        void *data;
};
 
/*普通结构体,作为实例结构体的私有成员*/
typedef struct _PMDListPrivate PMDListPrivate;
struct  _PMDListPrivate {
        PMDListNode *head;
        PMDListNode *tail;
};
 

/*类结构体的初始化,类似于C++中的static变量的初始化,函数地址分配等,此函数只会在第一次类实例化的时候被调用,后续类实例化不再调用*/ 
static void
pm_dlist_class_init (PMDListClass *klass)
{
    //成员函数定义,将PMDListPrivate定义为类成员变量。
    g_type_class_add_private (klass, sizeof (PMDListPrivate));
}
 
/*实例结构体的初始化,类似于C++中的构造函数*/
static void
pm_dlist_init (PMDList *self)
{
        PMDListPrivate *priv = PM_DLIST_GET_PRIVATE (self);
         
        priv->head = NULL;
        priv->tail = NULL;
}

源博客网址:http://garfileo.is-programmer.com/categories/6934/posts

 

C:GObject 子类对象的私有属性模拟

上一篇文章“使用 GObject 库模拟类的数据封装形式”讲述了 GObject 子类化过程,本文以其为基础,进一步讲述如何对数据进行隐藏,即对面向对象程序设计中的“私有属性”概念进行模拟。

非类类型数据的隐藏

第一个问题,可以称之为非类类型数据结构的隐藏,因为 PMDListNode 是普通的 C 结构体。隐藏这个结构体成员的方法有多种。

第一种方法尤为简单,如下:

1

2

3

4

5

6

7

8

typedef struct _PMDListNode PMDListNode;

struct  _PMDListNode {

/* private */

        PMDListNode *prev;

        PMDListNode *next;

/* public */

        void *data;

};

只需要向结构体中添加一条注释,用于标明哪些成员是私有的,哪些是可以被直接访问的。

也许你会认为这是开玩笑呢吧!但,这是最符合 C 语言设计理念的做法。C 语言认为,程序员应当知道自己正在干什么,而且保证自己的所作所为是正确的。

倘若你真的这么认为这是在开玩笑,那也没什么。我们还可以使用第二种隐藏的方法,即在 pm-dlist.h 文件中保留下面代码:

1

typedef struct _PMDListNode PMDListNode;

并将以下代码:

1

2

3

4

5

struct  _PMDListNode {

        PMDListNode *prev;

        PMDListNode *next;

        void *data;

};

转移到 pm-dlist.c 文件中。

这下隐藏的非常彻底。当然,这并不能防止用户打开 pm-dlist.c 文件查看 PMDListNode 的定义。不过,我们是自由软件,不怕你看。

如果想半遮半掩,稍微麻烦一些。可以在 pm-dlist.h 中写入以下代码:

1

2

3

4

5

6

typedef struct _PMDListPriv PMDListPriv;

typedef struct _PMDListNode PmdListNode;

struct _PMDListNode {

        PMDListPriv priv;

        void *data;

};

然后,将 PMDListPriv 的定义放在 pm-dlist.c 文件中,如下:

1

2

3

4

struct _PMDListPriv {

        PMDListNode *prev;

        PMDListNode *next;

};

GObject 子类对象的属性隐藏

GObject 子类对象的属性即继承 GObject 类的类的实例结构体所包含的属性,这句话说起来还真拗口。

考虑一下如何隐藏 PMDList 类的实例结构体中的成员。先回忆一下这个结构体的定义:

1

2

3

4

5

6

typedef struct _PMDList PMDList;

struct  _PMDList {

        GObject parent_instance;

        PMDListNode *head;

        PMDListNode *tail;

};

我们希望 head 与 tail 指针不容他人窥视,虽然可以使用上一节的方式进行数据隐藏,但是 GObject 库为 GObject 子类提供了一种私有结构体的机制,基于它也可以实现数据隐藏,而且更像是隐藏。

首先,我们将 pm-dlist.h 中 PMDList 结构体的定义修改为:

1

2

3

4

typedef struct _PMDList PMDList;

struct  _PMDList {

        GObject parent_instance;

};

然后,在 pm-dlist.c 文件中,定义一个结构体:

1

2

3

4

5

typedef struct _PMDListPrivate PMDListPrivate;

struct  _PMDListPrivate {

        PMDListNode *head;

        PMDListNode *tail;

};

再在 dm-dlist.c 中定义一个宏:

1

2

#define PM_DLIST_GET_PRIVATE(obj) (\

        G_TYPE_INSTANCE_GET_PRIVATE ((obj), PM_TYPE_DLIST, PMDListPrivate))

这个宏可以帮助我们从对象中获取所隐藏的私有属性。例如,在 PMDList 类的实例结构体初始化函数中,使用 PM_DLIST_GET_PRIVATE 宏获取 PMDList 对象的 head 与 tail 指针,如下:

1

2

3

4

5

6

7

8

static void

pm_dlist_init (PMDList *self)

{

        PMDListPrivate *priv = PM_DLIST_GET_PRIVATE (self);

         

        priv->head = NULL;

        priv->tail = NULL;

}

但是,那个 PMDListPrivate 结构体是怎样被添加到 PMDList 对象中的呢?答案存在于 PMDList 类的类结构体初始化函数之中,如下:

1

2

3

4

5

static void

pm_dlist_class_init (PMDListClass *class)

{

        g_type_class_add_private (klass, sizeof (PMDListPrivate));

}

由 于 pm_dlist_class_init 函数会先于 pm_dlist_init 函数被 g_object_new 函数调用,GObject 库的类型管理系统可以从 pm_dlist_class_init 函数中获知 PMDListPrivate 结构体所占用的存储空间,从而 g_object_new 函数在为 PMDList 对象的实例分配存储空间时,便会多分出一部分以容纳 PMDListPrivate 结构体,这样便相当于将一个 PMDListPrivate 结构体挂到 PMDList 对象之中。

GObject 库对私有属性所占用的存储空间是由限制的。一个 GObject 子类对象,它的私有属性及其父类对象的私有属性累加起来不能超过 64 KB。

将一切放到一起

将本文的示例代码综合到一起,便可以得到数据隐藏方法的全貌。

完整的 pm-dlist.h 文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#ifndef PM_DLIST_H

#define PM_DLIST_H

  

#include <glib-object.h>

  

#define PM_TYPE_DLIST (pm_dlist_get_type ())

  

typedef struct _PMDList PMDList;

struct  _PMDList {

        GObject parent_instance;

};

  

typedef struct _PMDListClass PMDListClass;

struct _PMDListClass {

        GObjectClass parent_class;

};

  

GType pm_dlist_get_type (void);

  

#endif

完整的 pm-dlist.c 文件,内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include "pm-dlist.h"

 

G_DEFINE_TYPE (PMDList, pm_dlist, G_TYPE_OBJECT);

#define PM_DLIST_GET_PRIVATE(obj) (\

        G_TYPE_INSTANCE_GET_PRIVATE ((obj), PM_TYPE_DLIST, PMDListPrivate))

 

typedef struct _PMDListNode PMDListNode;

struct  _PMDListNode {

        PMDListNode *prev;

        PMDListNode *next;

        void *data;

};

 

typedef struct _PMDListPrivate PMDListPrivate;

struct  _PMDListPrivate {

        PMDListNode *head;

        PMDListNode *tail;

};

 

static void

pm_dlist_class_init (PMDListClass *klass)

{

        g_type_class_add_private (klass, sizeof (PMDListPrivate));

}

 

static void

pm_dlist_init (PMDList *self)

{

        PMDListPrivate *priv = PM_DLIST_GET_PRIVATE (self);

         

        priv->head = NULL;

        priv->tail = NULL;

}

测试源代码文件 main.c 内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include "pm-dlist.h"

  

int

main (void)

{

        /* GObject 库的类型管理系统的初始化 */

        g_type_init ();

     

        PMDList *list;

 

        list = g_object_new (PM_TYPE_DLIST, NULL);

        g_object_unref (list);

          

        return 0;

}

总结

从上述各源文件来看,经过数据隐藏处理之后,pm-dlist.h 被简化,pm-dlist.c 变得更复杂。

事实上,PMDList 类实现完毕后,第三方(即类的使用者)如果要使用这个类,那么他面对的只是 pm-dlist.h 文件,因此一个简洁的 pm-dlist.h 是他最希望看到的。

pm-dlist.c 变得更加复杂,但是这并不是坏事情。因为我们已经尽力将细节隐藏在类的实现部分,而且这部分代码通常也是第三方并不关注的。

这就是数据隐藏的意义。

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com

深入掌握GObject系统:基于GObject参考手册的全面解析与实战 在现代C语言开发中,面向对象的设计模式已成为构建大型、可维护系统的核心手段。然而,C语言本身并不原生支持类与对象机制,因此需要借助运行时系统来模拟这些高级抽象。GObject系统正是为此而生——它不仅实现了完整的类与对象模型,还通过GType类型系统支撑了动态类型注册、继承、接口和信号等关键特性。本章将深入剖析GObject如何在C语言层面实现类与对象的定义,并详细解析GClass与GObject结构体的内存布局、初始化流程以及自定义类的完整实现路径。 阅读详情

相关推荐

gobject对象系统

简单的gobject入门文档,简单的介绍了gobject的相关知识,具体内容请下载查阅

使用 GObject 库模拟类的数据封装形式

本文原始出处:http://garfileo.is-programmer.com 事实上,有关 GObject 库的学习与使用,GObject 库参考手册提供了一份简短且过于晦涩的指南。如果你能够理解它,那么完全可以无视这篇以及后续的几篇文章。倘若没有明白那份指南,那么建议最好能克制一下,先不要急于去做文档 [1] 中所列举那些探索,谨记 Knuth 所说的,过早优化是诸恶之源。 这篇文档主要

铁匠Smith先生的专栏 1897

Gobject 资料,全面介绍

Gobject 资料,全面介绍Gobject 资料,全面介绍Gobject 资料,全面介绍Gobject 资料,全面介绍Gobject 资料,全面介绍Gobject 资料,全面介绍Gobject 资料,全面介绍

GObject 子类对象的私有属性模拟

本文原始出处:http://garfileo.is-programmer.com 上一篇文章“使用 GObject 库模拟类的数据封装形式”讲述了 GObject 子类化过程,本文以其为基础,进一步讲述如何对数据进行隐藏,即对面向对象程序设计中的“私有属性”概念进行模拟。 非类类型数据的隐藏 第一个问题,可以称之为非类类型数据结构的隐藏,因为 PMDListNode 是普通的 C 结构体

铁匠Smith先生的专栏 974

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器直接操作硬件外设,实现感知、决策与执行。这项技术的核心价值在于为物联网、智能硬件和机器人等领域提供了低功耗、高可靠性的解决方案。在机器人应用场景中,嵌入式平台常作为主控大脑,驱动舵机、传感器并处理交互逻辑。本文聚焦的Stack-chan项目,正是这一理念的生动实践:它采用流行的ESP32微控制器,并创新性地通过Moddable运行时支持使用JavaScript进行嵌入式开发,极大地降低了机器人编程的门槛。开发者可以基于此平台,轻松实

weixin_28729173的博客 437

@transactional滥用导致数据源连接池耗尽问题

@transactional滥用导致数据源连接池耗尽问题

qq_43205267的博客 1201

GObject 子类私有属性的外部访问

本文原始出处:http://garfileo.is-programmer.com   之前,写了一篇 GObject 劝学的文章 [1],还有两篇有关 GObject 子类对象数据封装的文章[2,3]。 虽然,创建一个 GObject 子类对象需要一些辅助函数和宏的支持,并且它们的内幕也令人费解,但是只要将足够的信任交托给 GObject 开发者,将那些辅助函数和宏当作“语法”糖一样享用,一

铁匠Smith先生的专栏 2540

UE5.6使用ndisplay,单窗口多画面(单机部署),配置、打包流程,无需switchboard

摘要:本文介绍了在UE5.6中使用ndisplay插件的完整流程。首先需要开启ndisplay和launch插件,创建ndisplay配置文件并设置本地单窗口多画面模式。随后通过Process Explorer获取启动命令用于制作bat文件。打包项目时需删除场景中的ndisplay文件,但保留内容浏览器中的配置,并设置为开发版打包。最后将ndisplay文件导出为.ndisplay格式,与bat文件一起放置在打包目录下,通过bat启动程序。注意修改路径和窗口大小时需保持纯英文路径,且bat代码需保持单行格式

weixin_43912248的博客 977

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

转载请注明出处 blog.csdn.net/pingf0 或www.cnblogs.com/pingf Part 4 接上文.前面定义了几个结构,我们可以把那些东西放在一个jc_boy.h文件中,下面开始介绍如何去实现这个BOY类,也就是要放在jc_boy.c中的部分。对于GObject而言,有了实例结构,有了类结构,自然要有如何初始化的函式,毕竟这是C语言吗,没有那么方便的事儿。 相应的...

weixin_30814329的博客 289

C# Code-Behind 技术全面解析

Code-Behind 是 ASP.NET Web Forms 中的一种技术模式,通过将用户界面标记(.aspx文件)与程序逻辑代码(.aspx.cs文件)分离,实现表现层与逻辑层的解耦。其核心思想是前端展示与后台逻辑的物理文件分离,通过ASP.NET编译器将两者合并编译成一个Page类并执行。Code-Behind 的优势包括较好的代码组织、较高的开发效率,尤其适合快速开发数据驱动应用。然而,与现代开发模式如ASP.NET MVC、ASP.NET Core和Blazor相比,Code-Behind 在可维

记录学习的过程 957

c++中,部署Ethercat IGH + PREEMPT_RT 环境,跑DC模式,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1358

在GObject对象中添加私有属性

添加的私有变量必然要涉及到更多的glib的宏,不过这里我们还无法进行分析,只是使用而已。 我们的程序设置了私有属性,一个是年龄,一个是名字,然后在类初始化函数中安装了属性,在实例初始化函数中设置了他们的初值。 新多了一个struct _SomeObjectPrivate 结构

xbl1986的专栏 1229

PMP第一章:引论介绍

PMP第一章:引论介绍 1.PMBOK指南概述和目的 项目管理标准 通用词汇 道德与专业行为规范 2.基本要素 项目 项目管理的重要性 项目、项目集、项目组合以及运营管理之间的关系 指南的组成部分 裁剪 项目管理商业文件 3.项目管理标准 标准是基于权威、惯例或共识而建立并用作模式或范例的文件。 标准确认了在大多数时候都被大多数项目视作良好实践的过程。 4.道德与专业行为规范 责任:对自己所做的决策或未做决策、所采取的行为或未采取行为,以及相应的后果,承担责任 尊重:对自己、他人和委托给自己的资源

zhengzaifeidelushang的博客 827

二、GObject子类对象的私有属性模拟

1.1 PMDList类头文件 /* file name : pm-dlist.h */ #ifndef PM_DLIST_H #define PM_DLIST_H #include <glib-object.h> /** * 通过该宏指向的pm_dlist_get_type函数 * 可以获得PMDList类结构体信息和初始化函数 * pm_dlist_get_type函数内部的实现由G_DEFINE_TYPE宏实现 */ #define PM_TYPE_DLIST (

Creationyang的博客 264

基于轻量化网络的干扰信号智能识别算法

针对干扰信号识别时卷积神经网络模型体积大、训练周期长、对硬件存储和计算要求高等问题,本 文提出了一种基于改进轻量级网络模型 SqueezeNet 的干扰信号智能识别算法。该方法首先利用距离多普勒 (Range‑Doppler,RD)处理获得目标及干扰信号的RD图像,接着采用滑窗变换、归一化等技术对RD图像进行重 塑;然后采用基于 RD 信息尺寸的隐层和通道剪枝措施对 SqueezeNet 网络进行改进,缩小了模型尺寸和存储空 间;最后利用不同参数的测试样本拓展网络模型的泛化性能。

qq_43416206的博客 545

从 VS Code 创建 ABAP Development Objects,包、命名、传输请求和 Clean Core 的一条线打通

文章摘要: SAP ABAP开发工具正从传统SAP GUI/Eclipse向VS Code迁移,通过ABAP Development Tools扩展实现代码编辑、调试和传输管理。文章重点分析了创建ABAP对象背后的治理逻辑:1)对象创建涉及包结构、命名规范、传输层等关键设计决策;2)VS Code通过命令面板(Ctrl+Shift+P)提供统一创建入口;3)对象类型选择反映架构意图,应从业务模型角度规划;4)Package是重要的治理边界,需按业务能力分区;5)命名和描述需体现业务语义;6)传输请求标记对象

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

Gobject专栏索引

索引首页:https://blog.csdn.net/knowledgebao/article/details/84776046 官网API:https://developer.gnome.org/gobject/stable/ gobject相关概念:https://blog.csdn.net/knowledgebao/article/details/82498187 第一章:GObjec...

knowledgebao的博客 7528

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

GObject学习(二)

GObject学习(二)GObject 子类对象的私有属性模拟非类类型数据的隐藏GObject 子类对象的属性隐藏将一切放到一起总结 本文是笔者整理网上资料加上一些自己实践的纪录,本文的主体内容转自如下文章: 源博客网址:http://garfileo.is-programmer.com/categories/6934/posts 以下是本文的所主要学习实践的其中c这个小题目的原文链接。 http...

whitealbert的专栏 857

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

GObject 学习笔记汇总---3

转自:http://garfileo.is-programmer.com/2011/2/28/data-hiden.24848.html GObject 子类对象的私有属性模拟 上一篇文章“使用 GObject 库模拟类的数据封装形式”讲述了 GObject 子类化过程,本文以其为基础,进一步讲述如何对数据进行隐藏,即对面向对象程序设计中的“私有属性”概念进行模拟。 非类类型数据的隐

吾皇的博客 915

GObject学习教程---第二章:模拟类的数据封装形式

索引:https://blog.csdn.net/knowledgebao/article/details/84633798 本文是学习学习他人的博客的心得(具体详见“楼主见解”),如果源网站可访问的话,建议直接访问源网站: 楼主见解: 主要介绍如何使用GObject定义自己的类,具体详见代码注释,此类的名称叫PMDList,函数前缀是pm_dist,类型是PM_TYPE_DLIST 主要...

knowledgebao的博客 4951

GObject学习教程---第一章:GObject是有用并且简单的

索引:https://blog.csdn.net/knowledgebao/article/details/84633798 本文是学习学习他人的博客的心得(具体详见“楼主见解”),如果源网站可访问的话,建议直接访问源网站: 楼主见解: 主要告诉你GObject多么的牛逼,多么的简单。这一部分没有什么可说的。 源博客网址:http://garfileo.is-programmer.com/...

knowledgebao的博客 1万+

Gobject 学习总结

简单的来说,GObject是一个程序库,它可以帮助我们使用C语言编写面向对象的程序。 很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C# 等等,而 C 语言是用来编写结构化程序的。事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。GObject 告诉我们,使用 C 语言编写程序时,可以运用面向...

chen_jianjian的专栏 5021

GObject [3] 子类对象私有属性的模拟-隐藏

1、隐藏什么,为什么要隐藏? 隐藏的就是非类类型数据,也就是不是我们要封装成类的数据。 隐藏以后就简化了.h文件,.c文件复杂了,使用类的人当然是希望他要看到的.h文件越简单越好。而.c这部分代码通常是第三方并不关注的。 2、如何隐藏? 方法很多,这里写出两种。 第一种,很简单,加上注释 /*private*/ 和/*public*/ 第二种,将上一篇的例子进行隐藏以后的结果如下: ...

fanzirong_的博客 253

快速上手Gobject

What is G-object? —很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C#等等,而C语言是用来编写结构化程序的。 —事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。 —Gobject,亦称Glib对象系统,是一个程序库,它可以帮助我们使用C语言编写面向对象程序;它提供了一

铁匠Smith先生的专栏 2万+
上一篇: GObject学习教程---第二章:模拟类的数据封装形式
下一篇: GObject学习教程---第四章:GObject 子类私有属性的外部访问
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值