java - C++ 中的头文件和Java 中的抽象类/接口(interface)实现是同一个想法吗?

标签 java c++ implementation

我对 C++ 有点熟悉,我知道对于几乎每个头文件,我都必须创建源文件来配合它。

现在我正在研究 java 接口(interface)和实现,它们看起来是一样的。 一开始你只是在一个类中命名变量和方法,然后在另一个类中定义它们。

C++和Java中的这些东西基本相同还是相似?

最佳答案

Java 接口(interface)和 C++ 头文件/实现文件是不同的概念。

C++ 有一个文本编译模型。因此,要在您的代码中使用某些东西(例如函数),编译器必须首先解析该函数​​的定义。通过将许多源文件中的内容放入您想要使用的头文件中,您不必重新编写函数的定义,因为您可以将相同的头文件包含到许多使用该头文件中的内容的源文件中。

C++ 中的函数可以通过只写函数名和参数来声明:

void PrintMessage(std::string text);

而且它们也可以通过编写方法体来定义:

void PrintMessage(std::string text)
{
  cout << text;
}  

您只能在一个编译单元中定义一次函数(这是在#includes 被它们包含的文件文本替换后编译器看到的所有文本)。但是,只要声明相同,您就可以多次声明一个函数。您必须定义每个被调用一次的函数。这就是为什么每个 .h 文件都有一个 .cpp 文件。 .cpp 定义了 .h 文件中声明的所有函数。 .h 文件包含在所有使用这些函数的 .cpp 文件中,并一次包含在定义函数的 .cpp 文件中。

Java 在编译项目时会查看项目中的所有文件,从而确定函数定义的位置。 C++ 一次只编译一个 .cpp 文件,并且只查看#included 头文件。

Java 接口(interface)相当于 C++ 抽象基类。它本质上是一组方法的声明,包括它们采用的参数类型和返回值的类型。 Java 接口(interface)或 C++ 抽象基类可以由实际定义(实现)这些方法的 Java 类或 C++ 类继承。

在C++中,当你创建一个类时,你通常(也有异常(exception))将方法声明放在头文件中,而你将定义放在.cpp 文件中。但是,在 Java 中,您只需要编写方法的定义,这些定义相当于 C++ 的定义和声明合二为一。您可以将所有 java 方法定义放在一个文件中。

关于java - C++ 中的头文件和Java 中的抽象类/接口(interface)实现是同一个想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092199/

相关文章:

java - 使用带有整数(索引)作为键的 HashMap 与使用 ArrayList

c++ - C++ 预处理器中的 R 和 L 有什么特别之处?

c++ - 有符号和无符号整数 C++ 实现的区别

algorithm - 计算尺码等级

c++ - 编译时出错 - 链接 .cpp 和头文件

java - Camel Redis 自动将字符串添加到键中

java - Java中链表的元音和辅音分离

java - 为什么我的构造函数不能正常工作?

c++ - 如果第二个参数在其中一次迭代中发生变化, 'for' 循环的迭代次数是否会发生变化?

c++ - 为什么在删除 `copy constructor`后仍使用 `move constructor`?