next up previous contents
Next: Weiterführende Literatur Up: Grundlagen von C++ Previous: Dynamische Speicherverwaltung


Organisation in Implementierungs-
und Header-Dateien

Ein großes Programm in einer einzigen Datei zu verwalten ist schwierig! Dies führt zu langen Übersetzungszeiten, unübersichtlicher Anordnung der verschiedenen Teile und zu extremen Problemen, die Datei konsistent zu halten, wenn mehrere Personen an diesem Projekt arbeiten.

Man trennt Programme daher meist in mehrere Dateien auf, die getrennt voneinander kompiliert werden. Übersetzbare (Implementierungs-) C++-Dateien erhalten den Suffix .cc (aber auch andere Endungen sind üblich). Dateien, die nur Deklarationen enthalten, heissen auch header-Dateien und dienen dazu, Funktionen und Daten aus einem Programmteil im anderen bekanntzumachen. Diese Dateien haben den Suffix .h. In der Regel (Ausnahme z.B. main.cc) gehört zu jeder Implementierungsdatei auch eine Header-Datei.

Header-Dateien sollten enthalten:

  1. Sog. include-guards, die das mehrfache Einschließen von Header-Dateien verhindern (vom Sprachstandard verlangt)
    #ifndef HEADER_H
    #define HEADER_H
      // declarations
    #endif
    
  2. Deklarationen von Funktionen, die modulübergreifend verwendet werden sollen. Zu Deklaration von Funktionen, die nur im jeweiligen Programmteil Verwendung finden sollen, können weitere Header-Dateien verwendet werden;
  3. Definition von inline Funktionen
  4. Deklaration von Klassen und deren Elementfunktionen
  5. extern Deklarationen globaler Variablen, Deklaration statischer Klassenvariablen.
  6. Deklaration und Definition von template - Funktionen und Klassen.

Implementierungsdateien sollten enthalten:

  1. Implementierung von Elementfunktionen von Nicht-Template-Klassen,
  2. Implementierung von regulären Funktionen.
  3. Deklaration von file-scope, class-scope und globalen statischen Variablen.


next up previous contents
Next: Weiterführende Literatur Up: Grundlagen von C++ Previous: Dynamische Speicherverwaltung
© R.Hilfer et al., ICA-1, Univ. Stuttgart
28.6.2002