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:用于存储类声明的头文件

C/C++编程笔记:什么是不透明指针?一文带你明白!

.

Image.cpp:将在不同端点之间共享的代码

C/C++编程笔记:什么是不透明指针?一文带你明白!

Image_windows.cpp:特定于Windows的代码将驻留在此处

C/C++编程笔记:什么是不透明指针?一文带你明白!

Image_apple.cpp:特定于Apple的代码将驻留在此处


从上面的示例可以看出,在定义CImage类的蓝图时,我们仅提及存在SImageInfo数据结构。

SImageInfo的内容是未知的。现在,由客户(Windows,Apple,Android)负责定义该数据结构并根据其要求使用它

如果将来我们要为新的端点“ X”开发应用程序,那么该设计已经存在。我们只需要为端点“ X”定义SImageInfo并相应地使用它即可。

请注意,上述示例是执行此操作的一种方法。设计全部是关于讨论和需求的。决定好设计时要考虑到许多因素。我们还可以具有特定于平台的类,例如CImageWindows,CImageApple,并将所有特定于平台的代码放在此处。

文章来源丨极客(geeksforGeeks)

每天学点小知识,希望对你有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

以上是关于C/C++编程笔记:什么是不透明指针?一文带你明白!的主要内容,如果未能解决你的问题,请参考以下文章

经验分享一文带你了解编程入门的通识知识

go语言学习笔记 — 基础 — 基本数据类型 — 指针:一文详解go指针

Spring-WebFlux使用,一文带你从0开始学明白Spring-WebFlux,学明白响应式编程

一文带你读懂 C/C++ 语言输入输出流与缓存区

一文带你入门 Java 函数式编程

C/C++编程笔记:用C++编写赋值运算符,一般什么情况下用?