B
//Edit Noch was, da man in den anderen .cpp auch #includes machen muss hat es von der Performance sicher auch Nachteile?
Bei der Ausführung des Programms brauchst du keine Nachteile erwarten. Ggf. dauert das Übersetzen etwas länger.
Die Header-Dateien dienen dem Compiler dazu, um zu wissen, WIE die Funktionen/Klassen/Methoden aussehen: Welchen Rückgabetyp sie haben, welche Parameter erwartet werden etc. Aus der Quelldatei (.cpp) wird eine Objektdatei erzeugt. Gut erkennen kann man das, wenn man "von Hand" übersetzt (z.B. mit dem GCC).
Gegeben seien drei Dateien:
// main.cpp
#include "hello.hpp"
int main()
{
cppde::hello();
}
// hello.hpp
#if !defined(CPPDE_HELLO_HPP__INCLUDED)
#define CPPDE_HELLO_HPP__INCLUDED
// Der so genannte Include-Guard verhindert, dass diese Dateien mehrfach
// eingebunden werden können
// In Headerdateien NIEMALS using namespace verwenden
namespace cppde {
void hello();
// Diese Funktion gibt ein "Hello World" über cout aus.
}
#endif
// hello.cpp
#include "hello.hpp"
#include <iostream> // Wird erst hier eingebunden, da es eine "Implementierungs-
// detail" ist.
void cppde::hello()
{
std::cout << "Hello World" << std::endl;
}
"Von Hand" übersetzt gingest du nun folgendermaßen vor:
1. übersetze/kompiliere hello.cpp -> Erzeugt eine Objektdatei hello.o
2. übersetze/kompiliere main.cpp -> Erzeugt eine Objekdatei main.o
3. verbinde/linke main.o mit hello.o und erzeuge das Programm HalloWelt
-> Erzeugt ausführbare Datei HalloWelt
Richtig angewendet sähe das so aus:
> g++ -c hello.cpp
> g++ -o HalloWelt main.cpp hello.o
Schritt 2 und 3 wurden hier zusammengefasst.
Da du eine IDE verwendest, sind diese Schritte für dich ohnehin nicht mehr sichtbar.
Die Funktionalitäten (Objektcode) aus <iostream> oder <string> werden auch erst im letzten Schritt (Linking) einmalig hinzugefügt. Es spielt also für dein fertiges Programm keine Rolle, ob du <iostream> nur einmal oder 100 mal in dein Projekt inkludierst.
Existiert die Objektdatei, welche auch in einer Bibliothek vorhanden sein kann, nicht, so entstehen die allseits geliebten undefined reference-Fehlermeldungen.
Grüße... Heiko