不透明指针2024 年 8 月 28 日 | 3 分钟阅读 不透明指针到底是什么?顾名思义,不透明是指我们无法看穿的东西。例如,木头就是不透明的。不透明指针是指向一种数据结构,其内容在定义时未知。 该指针之后是不透明的。其定义不揭示 STest 结构中包含的数据。 将不透明指针设置为 NULL 是安全的。 为什么需要不透明指针?有时我们只想告诉编译器:“嘿!这是一个我们的客户将使用的数据结构。别担心,客户将在准备编译单元时实现它。” 在处理共享代码时,这种设计非常健壮。请看以下示例: 假设我们正在开发一个图像处理应用程序。我们希望为 Windows、Android 和 Apple 平台开发应用程序,因为我们生活在一个一切都在向云端迁移、设备价格非常便宜的世界。因此,拥有一个健壮、可扩展且足够灵活以满足我们需求的好设计将是件好事。我们可以拥有所有平台使用的共享代码,然后不同的端点可以拥有平台特定的代码。 为了处理图像,我们有一个 CImage 类,它公开了各种图像操作(缩放、旋转、移动、保存等)的 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,其中我们可以放置所有特定于平台的代码。 结论不透明指针是不透明数据类型的一个子集,不透明数据类型是一种声明为指向某种未指定类型的记录或数据结构的指针的数据类型。 不透明指针可以在各种编程语言中找到,包括 Ada、C、C++、D 和 Modula-2。 如果语言是强类型的,那么对不透明指针类型 T 没有其他了解的程序和过程仍然可以声明该类型的变量、数组和记录字段,分配该类型的值,并比较这些值的相等性。但是,它们不能解引用这样的指针,并且只能通过调用包含缺失信息的程序来更改对象的内容。 下一个主题悬空指针、空指针、无效指针和野指针 |
在 C++ 和 Java 中,继承的目的是相同的。在这两种语言中,继承都用于代码重用和/或创建“is-a”关系。以下示例将展示 Java 和 C++ 在继承支持方面的差异。1) 在 Java 中,所有类...
阅读 3 分钟
在本文中,您将了解为什么全局变量在 C++ 中是邪恶的:全局变量在任何程序函数之外定义和声明。在程序的整个生命周期中,它们都保持其理想。在程序的执行过程中,它们是可用的。非 `const` 的全局变量...
阅读 3 分钟
在本文中,您将了解堆和树及其类型和示例之间的比较。什么是堆?满足堆属性的专用基于树的数据结构称为堆。父节点和子节点之间的关系由此属性决定,...
阅读 10 分钟
在本文中,我们将讨论包含其类型、示例和用法的变量。什么是变量遮蔽?变量遮蔽(Variable Shadowing)是一种编程语言概念,当一个变量在给定的作用域内隐藏或遮蔽了来自更广泛作用域的同名变量时发生。这……
阅读 4 分钟
在本文中,您将了解其语法和示例。什么是 std::get_temporary_buffer?C++ 中的
阅读 3 分钟
?在学习 C 和 C++ 编程语言中 void 函数的区别因素之前,让我们看几个例子,深入理解 void 函数的使用场景、我们可以从中得出的用例等等。Void fun顾名思义,void 就是什么都没有...
阅读 3 分钟
我们可以使用循环和算术运算符在 C++ 中反转数字。在此程序中,我们从用户那里获取数字作为输入并反转该数字。让我们看一个反转给定数字的简单 C++ 示例。示例 #include <iostream> using namespace std; int main() { int n, reverse=0, rem;...
阅读1分钟
使用 C++ 编程语言以各种方式完成数组降序排序是一项常见的任务。本教程将讨论两种按降序对数组进行排序的方法。1. 方法 1:#include <iostream> #include <algorithm> using namespace std; const int ARRAY_SIZE = 10; int main()...
阅读 4 分钟
问题简介:问题描述围绕着一个非常简单的使用位序列的游戏,玩家可以在轮流时更改他们的走法。游戏中的目标是将两个连续的 1 转换为零,这将由提供的...
阅读 10 分钟
在这种情况下,我们将讨论使用动态构造函数来初始化对象。“对象的动态初始化”是指在运行时初始化对象,或在那时为其赋予初始值。这可以通过使用构造函数并为它们提供参数来完成。它是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India