Header-Dateien & Quelldateien
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 3 von 104.
In C++ wird Code in Header-Dateien (.h) für Deklarationen und Quelldateien (.cpp) für Implementierungen aufgeteilt.
Header-Datei mit Header-Guards (helpers.h)
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endifQuelldatei mit Implementierungen (helpers.cpp)
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}Verwendung in main
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}Ausgabe:
Hello, Alice!
8Header-Guards (#ifndef, #define, #endif) verhindern, dass ein Header mehrfach eingebunden wird. Die .h-Datei deklariert, was existiert (Prototypen), die .cpp-Datei definiert, wie es funktioniert (Implementierungen).
Aufgabe
MittelErstellen Sie drei Hilfsfunktionen, die auf eine Header-Datei und eine Quelldatei aufgeteilt sind:
helpers.h— Funktionsdeklarationen mit Header-Guardshelpers.cpp— Funktionsimplementierungen
Zu erstellende Funktionen:
greet(name)— gibt"Hello, <name>!"zurückageInTenYears(age)— gibtage + 10zurückcheckAdult(name, age)— gibt"<name> is an adult"zurück, wenn age >= 18, andernfalls"<name> is a minor"
Spickzettel
C++-Code ist in Header-Dateien (.h) für Deklarationen und Quelldateien (.cpp) für Implementierungen organisiert.
Header-Guards verhindern mehrfaches Einbinden:
#ifndef HELPERS_H
#define HELPERS_H
// Deklarationen hier
#endifHeader-Datei (helpers.h) enthält Funktionsdeklarationen:
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endifQuelldatei (helpers.cpp) enthält Implementierungen:
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}Verwendung der Funktionen in main:
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}Probier es selbst
#include <iostream>
#include "helpers.h"
int main() {
std::string name;
int age;
std::getline(std::cin, name);
std::cin >> age;
std::cout << greet(name) << std::endl;
std::cout << "In 10 years you will be " << ageInTenYears(age) << std::endl;
std::cout << checkAdult(name, age) << std::endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamensräume & GültigkeitsbereicheEinführung in OOP in C++Klassen vs. ObjekteDer 'this'-PointerMethoden (Elementfunktionen)Attribute (Datenelemente)Grundlagen zu Ctors & DtorsRückblick - Einfacher Taschenrechner4Klasseneigenschaften
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen & KlassenZusammenfassung - Bankkonto-Manager7Vererbung
Grundlagen der VererbungZugriffsstufen bei VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick - Mitarbeiter-Hierarchie2Speicherverwaltung
Stack vs. Heap SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Smart Pointers in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsspezifizierer in C++Zugriffsspezifizierer im DetailInformation HidingStruct vs. ClassVerschachtelte & innere KlassenRückblick - Studentenverwaltungssystem8Polymorphie
Kompilierzeit- vs. Laufzeit-PolymorphieFunktionsüberladungVirtuelle Funktionen – WiederholungRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIZusammenfassung – Formen-Rechner3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorVerschiebekonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktoren im DetailRule of Three / Five / ZeroZusammenfassung - String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladen der [] und () OperatorenTypumwandlungsoperatorenRückblick - Matrix-Klasse9Templates
FunktionstemplatesKlassentemplatesTemplate-SpezialisierungVariadische TemplatesSFINAE & Type Traits GrundlagenRückblick - Generische Container