Erstellen eine Header-Datei in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden der Suffixe .h oder .hpp zum Erstellen einer Header-Datei in C++
  2. Verwendung von Header-Dateien zum separate Funktionsblöcke des Programms in Module aufzuteilen
Erstellen eine Header-Datei in C++

In diesem Artikel werden verschiedene Methoden zum Erstellen einer Header-Datei in C++ erläutert.

Verwenden der Suffixe .h oder .hpp zum Erstellen einer Header-Datei in C++

Zeitgenössische Programme werden selten ohne Bibliotheken geschrieben, bei denen es sich um von anderen implementierte Codekonstrukte handelt. C++ bietet ein spezielles Token - #include zum Importieren der erforderlichen Bibliotheksheaderdateien und externen Funktionen oder Datenstrukturen. Beachten Sie, dass Bibliotheksheaderdateien im Allgemeinen ein bestimmtes Dateinamensuffix wie library_name.h oder library_name.hpp haben. Die C++-Programmstruktur bietet das Konzept von Header-Dateien, um die Verwendung bestimmter wiederverwendbarer Codeblöcke zu vereinfachen. Auf diese Weise können Benutzer ihre eigenen Header-Dateien erstellen und diese bei Bedarf in Quelldateien aufnehmen.

Angenommen, der Benutzer muss eine Klasse mit dem Namen Point implementieren, die zwei Datenelemente vom Typ double enthält. In der Klasse sind zwei Konstruktoren und der Operator + definiert. Es hat auch eine print-Funktion, um die Werte beider Datenelemente in den cout-Stream auszugeben. Im Allgemeinen gibt es auch Header-Guards, die die Klassendefinition Point enthalten, um sicherzustellen, dass bei der Aufnahme in relativ große Programme keine Namenskonflikte auftreten. Beachten Sie, dass für die nach include guard definierten Variablennamen ein konsistentes Namensschema vorhanden sein sollte. Normalerweise werden diese Variablen nach der Klasse selbst benannt.

#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

Eine andere Methode zum Strukturieren einer Header-Datei für die Klasse Point besteht darin, den Funktionsimplementierungscode in dieselbe Datei aufzunehmen. Beachten Sie, dass das Einfügen des vorherigen Codeausschnitts in eine Point.hpp-Datei und das Einfügen mehrere undefinierte Fehler hervorruft. Da die Funktionen im folgenden Beispielcode definiert sind, können wir sie als Header-Datei Point.hpp einfügen und die Klasse mit ihren Methoden verwenden.

#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

Verwendung von Header-Dateien zum separate Funktionsblöcke des Programms in Module aufzuteilen

Alternativ kann ein modulbasiertes Trennungsschema für Header und entsprechende Quelldateien der angegebenen Klasse verwendet werden, um eine flexiblere Projektdateistruktur zu implementieren. In diesem Entwurf sollte man jede funktional unterschiedliche Klasse in einer separaten .hpp-Headerdatei definieren und ihre Methoden in einer Quelldatei mit demselben Namen implementieren. Sobald die benötigte Header-Datei der Klasse in der Hauptquelldatei enthalten und kompiliert ist, kombiniert der Präprozessor die Codeblöcke aus allen enthaltenen Header-Dateien. Das Ergebnis entspricht dem Kompilieren des folgenden Quellcodes, der die Funktionalität in einem einzigen implementiert Quelldatei.

#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);
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Header