C/C++编程笔记:什么是不透明指针?一文带你明白!
Posted C语言编程学习基地
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++编程笔记:什么是不透明指针?一文带你明白!相关的知识,希望对你有一定的参考价值。
什么是不透明指针?
顾名思义,不透明是我们看不到的。例如,木材是不透明的。不透明指针是指向数据结构的指针,该数据结构的内容在定义之时不公开。
跟随指针是不透明的。通过查看定义,无法知道STest结构中包含的数据。
struct STest * pSTest;
将NULL分配给不透明的指针是安全的。
pSTest = NULL;
为什么不透明的指针?
在某些地方,我们只想提示编译器“嘿!这是我们的客户将使用的某些数据结构。不用担心,客户将在准备编译单元时提供其实现”。当我们处理共享代码时,这种类型的设计是健壮的。请参见以下示例:
假设我们正在开发一个用于处理图像的应用程序。由于我们生活在一个万事俱备的世界中,而且购买设备的价格非常便宜,因此我们希望开发适用于Windows,android和Apple平台的应用程序。因此,根据我们的要求,有一个健壮,可扩展和灵活的好的设计将是很好的。我们可以拥有所有平台都可以使用的共享代码,然后不同的端点可以拥有平台特定的代码。
为了处理图像,我们有一个CImage类,该API公开了API以处理各种图像操作(缩放,旋转,移动,保存等)。
由于所有平台都将提供相同的操作,因此我们将在头文件中定义此类。但是,跨平台处理图像的方式可能有所不同。就像Apple可以使用与Windows不同的机制来访问图像的像素。这意味着API可能需要不同的信息集来执行操作。因此,要处理共享代码,这就是我们要做的事情:
Image.h:用于存储类声明的头文件
.
Image.cpp:将在不同端点之间共享的代码
Image_windows.cpp:特定于Windows的代码将驻留在此处
Image_apple.cpp:特定于Apple的代码将驻留在此处
从上面的示例可以看出,在定义CImage类的蓝图时,我们仅提及存在SImageInfo数据结构。
SImageInfo的内容是未知的。现在,由客户(Windows,Apple,Android)负责定义该数据结构并根据其要求使用它
如果将来我们要为新的端点“ X”开发应用程序,那么该设计已经存在。我们只需要为端点“ X”定义SImageInfo并相应地使用它即可。
请注意,上述示例是执行此操作的一种方法。设计全部是关于讨论和需求的。决定好设计时要考虑到许多因素。我们还可以具有特定于平台的类,例如CImageWindows,CImageApple,并将所有特定于平台的代码放在此处。
文章来源丨极客(geeksforGeeks)
每天学点小知识,希望对你有帮助~
另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
以上是关于C/C++编程笔记:什么是不透明指针?一文带你明白!的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 基础 — 基本数据类型 — 指针:一文详解go指针