在 C++ 中创建头文件

Jinku Hu 2023年10月12日
  1. 使用 .h.hpp 后缀在 C++ 中创建头文件
  2. 使用头文件将程序中的独立功能块分解成模块
在 C++ 中创建头文件

本文将解释几种如何在 C++ 中创建头文件的方法。

使用 .h.hpp 后缀在 C++ 中创建头文件

当代程序很少是在没有库的情况下编写的,而库是由其他人实现的代码构造。C++ 提供了特殊的标记-#include 来导入所需的库头文件和外部函数或数据结构。请注意,通常,库头文件具有特定的文件名后缀,例如 library_name.hlibrary_name.hpp。C++ 程序结构提供了头文件的概念,以简化某些可重用代码块的使用。因此,用户可以创建自己的头文件,并根据需要将其包括在源文件中。

假设用户需要实现一个名为 Point 的类,其中包含两个类型为 double 的数据成员。该类具有两个构造函数和其中定义的+ 运算符。它还具有打印函数,可将两个数据成员的值输出到 cout 流。通常,还有一些头保护符将 Point 类定义括起来,以确保在包含在相对较大的程序中时不会发生名称冲突。请注意,在包含保护之后定义的变量名称应具有一致的命名方案;通常,这些变量以类本身的名字命名。

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

#endif

Point 类构造头文件的另一种方法是在同一文件中包含函数实现代码。请注意,将先前的代码片段放入 Point.hpp 文件中,并包含它将会引发一些未定义的错误。由于这些函数是在以下示例代码中定义的,因此我们可以将其作为 Point.hpp 头文件包含在内,并使用该类及其方法。

#include <iostream>
#include <vector>

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

Point::Point() { x = y = 0.0; }

Point::Point(double a, double b) {
  x = a;
  y = b;
}

Point Point::operator+(const Point &other) const {
  return {x + other.x, y + other.y};
}

void Point::print() { std::cout << "(" << x << "," << y << ")" << std::endl; }

#endif

使用头文件将程序中的独立功能块分解成模块

或者,可以使用基于模块的分隔方案来处理给定类的头文件和相应的源文件,以实现更灵活的项目文件结构。在这种设计中,应该在单独的 .hpp 头文件中定义每个功能上不同的类,并在具有相同名称的源文件中实现其方法。一旦将类所需的头文件包含在主源文件中并进行编译,预处理器将合并所有包含的头文件中的代码块,其结果将与编译以下源代码相同,后者可在单个代码中实现功能源文件。

#include <iostream>
#include <vector>

#ifndef POINT_H
#define POINT_H

class Point {
  double x, y;

 public:
  Point();
  Point(double, double);
  Point operator+(const Point &other) const;
  void print();
};

Point::Point() { x = y = 0.0; }

Point::Point(double a, double b) {
  x = a;
  y = b;
}

Point Point::operator+(const Point &other) const {
  return {x + other.x, y + other.y};
}

void Point::print() { std::cout << "(" << x << "," << y << ")" << std::endl; }
#endif

using std::cin;
using std::cout;

int main() {
  double x, y;

  cin >> x >> y;
  Point a1(x, y);
  cin >> x >> y;
  Point a2(x, y);

  cout << "a1: ";
  a1.print();
  cout << "a2: ";
  a2.print();

  a1 = a1 + a2;
  cout << "a1+a2: ";
  a1.print();

  exit(EXIT_SUCCESS);
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook