头文件是否被视为 API?

问题描述 投票:0回答:2

我很难理解 API 的实际含义和用途。假设我有一个 main.cpp 文件,并使用我在主文件中使用的函数创建了 aa.cpp 和 aa.h 标头。标头会被视为 API 吗?我在 main.cpp 中使用并在 aa.cpp 中实现的函数是否会被视为 API?

c++ api header
2个回答
1
投票

API 是定义如何与某个对象交互的接口。 hpp 文件不是接口,但可能包含这样的接口。

您可以将类的任何公共部分视为 API - 这是所有用户都可见的接口,可以使用它来与某个对象进行交互。 静态函数也是如此,它在不涉及对象时允许功能。

请注意,并非类的所有方法都是公共的;所有负责对象内部表示的函数都不应该对其他人可见,并且 不是其 API 的一部分封装原理)。

此外,很多时候我们使用抽象接口(通常名称以 I 开头的类,例如IClassName)。这些接口旨在用作底层实现的抽象,并且是面向对象编程的重要组成部分(抽象的原理,它与继承允许我们使用多态性 )。


1
投票

API 有很多定义。其中之一是:

API 提供了抽象和功能规范。 在 C++ 中,这是通过一个或多个头文件 (.h) 以及支持文档的文件(.pdf 格式的 API 文档)来完成的。

那么现在当 API 位于头文件 (.h) 中时,它的内容是什么? 大多数 API 都通过函数原型和成员变量来定义类。

其中函数原型只是函数的签名或声明,它告诉编译器:函数的名称、函数的返回类型、函数的可访问性(主要是公共的,因为它是 API)和参数/参数列表。

函数原型不包含函数体,因为它是函数的签名/声明。

函数的实际实现是写在不同的文件中(主要是.cpp文件)。

现在,当定义位于头文件 (.h) 内部且实现位于 .cpp 文件中时,我们将头文件的内容包含到实现 API 实际功能的文件中(因此编译器可以将头文件内部的这些声明链接到以下函数)实现它们)。这是通过在文件内使用 #include 指令来实现的,该指令实现了 API(.cpp 文件)。

我们可以将 .cpp 文件编译成不同类型的翻译单元,例如目标文件 (.o)、库(Windows .lib、.dll ;Linux .a、.so)或可执行程序 (.exe)。

为了在这个答案中演示 API,您可以将 .cpp 文件映像编译为 .lib 文件(静态库)。

现在你有.lib文件,其中包含包含在.cpp中的API(.h文件)的内容,但它被转换为二进制格式,因此不可读。

现在您将库和头文件(包含 API)上传到某个地方,以便人们可以下载它。 当人们下载您的头文件和库时,他们将通过将头文件包含到他们自己的 .cpp 文件中来使用头文件 (API)。现在人们可以使用您在 API 中定义的函数,因为它的实现位于 .lib 文件中。

结果是包含的头文件以头文件包含的类和函数名称的形式提供抽象。他们仅看到和使用定义 - 签名(稍后由编译器链接到 .lib 文件中的实现),但他们看不到 .lib 文件内部的完整实现。这就是创建抽象的时刻(隐藏详细功能并且仅公开基本信息时)。

这里是构建简单数学库的完整文档,您将通过创建包含头文件内简单数学函数定义的类来创建简单的API。

© www.soinside.com 2019 - 2024. All rights reserved.