编程技术分享平台

网站首页 > 技术教程 正文

C语言中的封装(c语言中的封装概念)

xnh888 2024-10-25 18:10:59 技术教程 38 ℃ 0 评论

C++有封装的特性,私有变量不允许调用者直接访问,需要时,必须通过公开的接口进行操作。C语言其实也可以有。比如在调用API接口时,返回一个句柄指针,该指针类型为void *,不是某个数据结构。该数据结构称为内部数据结构,可以在你的C源码实现中定义。在windows下,有很多API接口都会返回类似HANDLE的句柄,基本上都是一个void *类型的指针,用户使用HANDLE句柄进行后续的各种操作,比如CreateFile函数;linux下经常采用整数来表示一个句柄,socket函数会返回一个整数。在实现AP接口时,如果你的数据结构对用户可见,那么,用户是有可能直接设置其中的变量的,用户的这种直接修改变量的做法,可能与你的想法相差甚远。

这种封装是对用户透明的,调用者不应当根据返回的句柄来猜测其数据结构,API实现者不保证直接使用该内部数据的合法性、正确性和可延续性,特别是windows下(源码不公开)。对于windows的内部数据结构,用户不清楚其内部是怎样定义的,windows又没有提供官方的API接口,用户又要实现某些功能(比如干坏事)。一种做法是通过测试,得到某一个偏移量,确定其是某一个变量,然后修改访问。这种做法其实是危险的,微软提不提供某种API肯定是经过深思熟虑的。违反规定去干事情,会带来系统的不稳定。

封装的意义之一在于: 某些变量的访问非常不适合外部用户来做,而适合实现者内部完成,调用者不应当关心其所代表的内部意义,并且内部的数据结构还很有可能会变化。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表