网站首页 > 技术教程 正文
C++有封装的特性,私有变量不允许调用者直接访问,需要时,必须通过公开的接口进行操作。C语言其实也可以有。比如在调用API接口时,返回一个句柄指针,该指针类型为void *,不是某个数据结构。该数据结构称为内部数据结构,可以在你的C源码实现中定义。在windows下,有很多API接口都会返回类似HANDLE的句柄,基本上都是一个void *类型的指针,用户使用HANDLE句柄进行后续的各种操作,比如CreateFile函数;linux下经常采用整数来表示一个句柄,socket函数会返回一个整数。在实现AP接口时,如果你的数据结构对用户可见,那么,用户是有可能直接设置其中的变量的,用户的这种直接修改变量的做法,可能与你的想法相差甚远。
这种封装是对用户透明的,调用者不应当根据返回的句柄来猜测其数据结构,API实现者不保证直接使用该内部数据的合法性、正确性和可延续性,特别是windows下(源码不公开)。对于windows的内部数据结构,用户不清楚其内部是怎样定义的,windows又没有提供官方的API接口,用户又要实现某些功能(比如干坏事)。一种做法是通过测试,得到某一个偏移量,确定其是某一个变量,然后修改访问。这种做法其实是危险的,微软提不提供某种API肯定是经过深思熟虑的。违反规定去干事情,会带来系统的不稳定。
封装的意义之一在于: 某些变量的访问非常不适合外部用户来做,而适合实现者内部完成,调用者不应当关心其所代表的内部意义,并且内部的数据结构还很有可能会变化。
猜你喜欢
- 2024-10-25 Java 17 NIO 知识点 Files 操作(java17课)
- 2024-10-25 PE格式:新建节并插入代码(怎么用pe创建新用户)
- 2024-10-25 入门Java不迷路!一篇教你搞懂Java 「File类」的概述和方法
- 2024-10-25 Qt 之QTemporaryFile用法(创建临时文件)
- 2024-10-25 EndNote使用技巧(4)之七种方法导入文献?一文全搞定
- 2024-10-25 Vue+Element UI实现断点续传、分片上传、秒传
- 2024-10-25 共享数据资源,VBA代码导入已有文本数据文件的方法
- 2024-10-25 (12)文本文件操作参考(文本的基本操作)
- 2024-10-25 使用StreamWriter类的对文件创建写入
- 2024-10-25 大文件上传:秒传、断点续传、分片上传
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)