KAPITEL 1
Programmstruktur
Auf der höchsten Ebene besteht ein C++-Programm aus einer oder mehreren Quelldateien, die C++-Quellcode enthalten. C++-Quell-dateien binden oft zusätzlichen Quellcode in Form von Header-Dateien ein. Der C++-Präprozessor ist für das Einbinden des Codes aus diesen Dateien vor der Kompilierung jeder Datei zuständig. Gleichzeitig kann der Präprozessor aber auch mittels sogenannter Präprozessoranweisungen verschiedene andere Operationen ausführen. Eine Quelldatei wird nach der Vorverarbeitung durch den Präprozessor Übersetzungseinheit (Translation Unit) genannt.
Programmstart
Die Funktion main, die genau einmal definiert werden muss, ist der Einstiegspunkt für das C++-Programm. In der standardisierten Form erwartet diese Funktion kein Argument oder aber zwei Argumente, die das Betriebssystem beim Programmstart mitliefert. Viele C++-Implementierungen erlauben zusätzliche Parameter. Der Rückgabetyp der main-Funktion ist int:
int main()
int main(int argc, char* argv[])
argc gibt die Anzahl der Argumente auf der Kommandozeile an. argv hingegen ist ein Array von C-Strings, das die Argumente in der Reihenfolge ihres Auftretens enthält. Der Name des ausführbaren Programms steht in dem Element argv[0]. Der Wert von argv[argc] ist 0.
Das folgende Beispiel zeigt die main-Funktion eines einfachen C++-Programms, das den Benutzer nach den Aktionen fragt, die auf einem Konto durchgeführt werden sollen:
#include <iostream>
#include <cstdlib>
#include "Account.h"
int main(int argc, char* argv[]){
Account account(0.0);
if (argc > 1) account.deposit(std::atof(argv[1]));
char action;
double amount;
while (true){
std::cout << "The balance is
"<< account.getBalance()
<< std::endl;
std::cout << "Choice: d, w or e: ";
std::cin >> action;
switch (action){
case 'd':
std::cout << "Amount paid in: ";
std::cin >> amount;
account.deposit(amount);
break;
case 'w':
std::cout << "Amount paid out: ";
std::cin >> amount;
account.withdraw(amount);
break;
case 'e':
exit(0);
default:
std::cout << "Error" << std::endl;
}
}
return 0;
}
Die Definition für die Klasse Account folgt später. Auf der Kommandozeile wird beim Programmstart eine initiale Einzahlung angegeben. Die Funktion atof aus der C++-Standardbibliothek dient dazu, das Kommandozeilenargument von einem C-String in einen double-Wert zu konvertieren.
Programmende
Mit dem Verlassen der main-Funktion ist das C++-Programm beendet. Der Rückgabewert wird an das Betriebssystem weitergegeben und wird zum Rückgabewert des ausgeführten Programms. Falls main keine return-Anweisung enthält, wird ein implizites return 0 am Ende des Funktionskörpers von main ausgeführt. Durch das explizite Aufrufen der exit-Funktion aus der C++-Standardbibliothek kann ein Programm direkt beendet werden. Diese Funktion erwartet den Rückgabewert des ausführbaren Programms als Argument.
Header-Dateien
Header-Dateien, die typischerweise die Dateinamenserweitung .h besitzen, enthalten Quellcode, der in mehreren Dateien eingebunden werden kann. Eine Header-Datei sollte dagegen nie eines der folgenden Dinge enthalten:
- Definitionen von Variablen und statischen Attributen (der Abschnitt »Deklarationen« auf Seite 65 beschreibt den Unterschied zwischen Deklarationen und Definitionen).
- Definitionen von Funktionen mit Ausnahme von Funktions-Templates und Inline-Funktionen.
- Unbenannte Namensräume.
| Header-Dateien in der C++-Standardbibliothek verwenden keine Dateinamenserweiterung. So ist die std::string in der Header-Datei string definiert. |
Meistens wird für jede wichtige Klasse, die definiert wird, eine Header-Datei angelegt. Zum Beispiel ist die unmittelbar folgende Klasse Account in der Header-Datei Account.h definiert.
#ifndef ACCOUNT_H
#define ...