注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

太阳神上的博客

青青子衿,悠悠我心,但为君故,沉吟至今。

 
 
 

日志

 
 
 
 

用C语言实现数据隐藏  

2008-02-05 21:51:40|  分类: 程序设计创意 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  数据隐藏是面向对象程序设计的重要特征之一,对于本身语法上并不支持数据隐藏的C语言,来如何实现数据隐藏呢?在glib中的源代码里,我看到了一个很巧妙的实现。
  glib提供了一个GArray的结构,可以用其来实现类似C++ STL中vector的东西,但是这个结构只有两个字段,一个是data,用来保存数据的地址,另外一个是元素的个数len,这样一来就有了一个问题,例如如何实现数组的动态增长呢?因为还得有相应的字段来记录数据缓存区的长度才行啊,但这个字段最好又不是GArray的成员,因为C语言的结构体都是公有的,外界不对此字段进行读写,只有相应的函数才行。
  glib的做法是定义一个叫GRealArray的结构体,它是实际保存数组所有信息的结构,在用g_array_new生成这个GArray结构体指针时,事实上生成的是GRealArray结构体,然后将其强制转换。而对于g_array_append之类的函数,在函数体内部则又将其轮换成GRealArray结构,因为在GRealArray与GArray中,public字段是都有的,而private字段则是GRealArray所独有,对于使用GArray的人来说,那些私有字段都只有GRealArray才有,因此无法访问到,这样便实现了数据隐藏。
  评论这张
 
阅读(302)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017