![]() |
![]() |
C++ - Funktionen nutzen (3) |
G.Eichelsdörfer - Staatliche Technikerschule Weilburg |
Zu diesem Zweck existiert zu jeder Funktion eine Kopfzeile, in der diese Informationen stecken.
Diese Kopfzeilen werden auch header genannt und stehen in den Beschreibungsdateien, die wir einbeziehen
(#include
).
Deshalb werden solche Dateien auch Header-Dateien genannt.
Wenn wir später solche Dateien anlegen, erhalten diese statt des Zusatzes ".cpp" den Zusatz
".h". Wenn Sie einem VC++-Projekt eine Datei hinzufügen wollen, können Sie im Dialog auch eine
"C/C++-Header-Datei" auswählen.
Nun aber zu diesen merkwürdigen Kopfzeilen (Headern).
Sie haben bereits eine Kopfzeile geschrieben:
int main()
Darin bedeutet die Typangabe am Anfang den Typ des Funktionsresultats. Daran sieht man, von welchem Typ der Wert ist,
welcher von der Funktion exportiert wird. main()
exportiert also einen ganzzahligen Wert (int).
Nach dem Resultatstyp folgt der Name der Funktion - hier main
.
In den runden Klammern steht die Parameterliste. Diese ist hier leer, was bedeutet, dass diese Funktion nichts
importiert.
Wenn eine Kopfzeile alleine steht - ohne die Innereien innerhalb der geschweiften Klammern, dann nennt man diese Kopfzeile den Prototyp der entsprechenden Funktion. Weil unterhalb des Prototyps zu dieser Funktion nichts weiteres folgt, schließt man ihn mit einem Semikolon ab.
Die Sinusfunktion besitzt folgenden Prototyp:
double sin(double Winkel);
Sie liefert also ein double
-Resultat, heißt sin
und importiert einen Parameter
vom Typ double
. Der von mir gewählte Name des Parameters tut nichts zur Sache und soll nur deutlich machen,
worum es sich dabei handeln soll. double sin(double)
würde hier auch genügen, macht aber weniger deutlich.
Wenn im Quelltext eine Funktion aufgerufen wird, dann kann der Compiler an Hand deren Prototyps überprüfen,
ob der Aufruf syntaxgerecht erfolgt. Andernfalls kann er den Aufruf nicht übersetzen und meldet einen Syntaxfehler.
Beispiel:
std:: string x = "1.57"; // Als Zahl etwa Pi/2, hier aber ein String!
double y = sin(x); // Fehler! Der Parameter muss vom Typ double sein.
Hinweis:
Falls der Compiler von sich aus den übergebenen Parameterwert in eine double
-Darstellung umwandeln kann,
gelingt der Aufruf trotzdem.
int x = 1;
double y = sin(x); // Das geht.
Der Compiler sorgt für die Konvertierung des Parameters in eine double-Darstellung.
Sie sollten jedoch so etwas nicht schreiben. Wenn ein Compiler keinen Fehler meldet,
dann ist das Programm noch längst nicht gut geschrieben.
Einen Sinuswert von einer Ganzzahl zu berechnen, macht normalerweise keinen Sinn.
Zu den Winkelfunktionen gibt es Umkehrfunktionen, die zu einem Zahlenwert einen Winkel im Bogenmaß liefern.
Sie werden deshalb auch Arcus-Funktionen genannt (Arcus = Bogen). Sie heißen:
asin(), acos(), atan()
. Das a zu Beginn kommt von Arcus.
Die Funktion atan()
kann zur Umwandlung von Kartesischen Koordinaten (x,y) in Polarkoordinaten (r,phi)
verwendet werden. Sie ist dafür allerdings nicht optimal ausgestattel, weil sie nicht immer den tatsächlichen Winkel phi
liefert. Zu diesem Zweck gibt es die besser geeignete Funktion atan2()
.
Diese besitzt folgenden Prototyp:
double atan2(double y, double x);
Sie liefert also ein double
-Resultat und importiert zwei double
-Parameter.
x und y sind die beiden kartesischen Koordinaten.
Eine Funktion kann aber auch Parameter unterschiedlicher Typen importieren.
Hierzu konstruiere ich einmal ein Beispiel:
std::string konvertiere(double Zahl, int Nachkommastellen);
Diese Funktion heißt konvertiere
. Sie importiert einen double
-Parameter und
einen int
-Parameter. Sie exportiert ein std::string
-Objekt.
Dieser String könnte ausgegeben werden.
Wenn eine Funktion kein Resultat exportiert, dann steht vor dem Funktionsnamen das Wort void
,
was soviel heißt wie nichtig, nicht vorhanden.
Beispiel:
void ausgeben(std::string Str, int Haeufigkeit);
Diese Funktion soll beispielsweise den importierten String so oft ausgeben, wie der zweite
Parameter Haeufigkeit angibt.