Nachdem jetzt alle wichtigen Techniken zur Programmstrukturierung erläutert wurden, soll zum Abschluß dieses Kapitels noch erklärt werden, wie man sie sinnvoll nutzt. Denn auch wenn man mit dem #include-Befehl alle Quelltexte in alle anderen einbinden könnte, so würde es wenig Sinn machen, eine Aufteilung der Quelltexte nach Lust und Laune vorzunehmen.
Genauer gesagt gibt es eigentlich genau einen Standard, nach dem Dateien aufgeteilt werden: Eine Aufteilung in sogenannte Sourcefiles auf der einen und headerfiles auf der anderen Seite. Diese Aufteilung richtet sich nach den unterschiedlichen Bedürfnissen von Compiler und Linker.
Der Compiler braucht keine Informationen über die Funktionen an sich, sondern nur darüber, wie sie aufgerufen werden, da er ja Aufrufe von Funktionen nicht auflöst. D.h. er braucht nur die Informationen über ihre Schnittstelle, die in C++ gerade durch die Deklaration erklärt wird. Daher werden die Deklarationen in seperate Dateien - die headerfiles - geschrieben, eventuell zusammen mit Konstanten und Typdefinitionen, die zu diesem Teil des Quelltextes gehören und anderen Teilen bekannt sein müssen. Diese headerfiles können dann mit dem #include-Befehl in andere Dateien eingebunden werden - sie werden üblicherweise durch die Dateiendung '.h' gekennzeichnet.
Der Linker braucht dann später die kompletten Informationen zu den Funktionen - ihre Implementierung. Diese wird in C++ durch den Definitionsteil geliefert, daher werden alle Definitionen in den zweiten Typ von Dateien geschrieben: die Sourcefiles. Dies hat den Vorteil, daß diese unabhängig voneinander in Objektcodes compiliert werden können - die für den Compiler nötigen Informationen liegen ja separat in den headerfiles. Bei Bedarf können später die Objektcodes zu Bibliotheken zusammengefaßt werden.
Bei der Aufteilung in Source- und headerfiles gibt es drei wichtige Grundregeln zu beachten:
Nur Informationen, die von anderen Programmteilen benötigt werden, gehören in ein headerfile, alles andere gehört in das Sourcefile