Erstellen eine Header-Datei in C++
-
Verwenden der Suffixe
.h
oder.hpp
zum Erstellen einer Header-Datei in C++ - Verwendung von Header-Dateien zum separate Funktionsblöcke des Programms in Module aufzuteilen
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);
}
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