Funktionen in C++
Zu Teil 1: Grundlagen von C++ und Compiler
Zu Teil 2: Das erste C++-Programm
Zu Teil 3: Variablen, Ausdrücke und Ablaufsteuerung in C++
Teil 4: Funktionen in C++
Funktionen in C++
Nun kennen wir bereits einiges wichtiges Handwerkszeug, das wir für die Erstellung von C++-Programmen benötigen. Das Konzept der Funktionen hatten wir bei der Besprechung der Hauptfunktion nur kurz angerissen und wollen es an dieser Stelle etwas vertiefen.
Eine Funktion ist also eine Zusammenfassung von Anweisungen, die man einmal definiert und dann aber beliebig oft aufrufen kann. Es ist dann nur noch nötig, den Namen der Funktion an der Stelle hinzuschreiben, an der man die Anweisungen ausführen will. Auf diese Weise kann man häufig genutzten Code in Funktionen auslagern und schafft es damit, das Programm übersichtlicher zu gestalten. Insbesondere wenn man den Funktionen „gute“ Namen gibt, aus denen man den Zweck der Funktion herauslesen kann, wird dadurch die Verständlichkeit eines Programmes erhöht.
Zudem besitzen Funktionen auch verschiedene Möglichkeiten, mit den Stellen im Code, von denen sie aufgerufen werden, zu interagieren. So ist es möglich, Funktionen Parameter mitzugeben. Das können z.B. Variablen sein, die an der Aufrufstelle der Funktion definiert wurden und die dann innerhalb der Funktion verwendet werden können. Zudem kann jede Funktion am Ende einen Wert oder ein Objekt an die aufrufende Stelle im Code zurückgeben (muss aber nicht).
Funktionen werden nach dem folgenden Schema definiert:
RÜCKGABETYP FUNKTIONSNAME(<PARAMETERLISTE>) { Anweisung 1; Anweisung 2; ... }
Bei einer Funktion muss also immer zunächst der Rückgabetyp angegeben werden. Typen die wir schon kennengelernt haben sind int für Ganzzahlen und unsigned int für nicht-negative Ganzzahlen. Andere häufig verwendete Typen sind double und float für „Kommazahlen“ und string für Zeichenketten (also z.B. um Wörter oder Sätze in Variablen zu speichern). Bei Funktionen, die nichts zurückgeben sollen, gibt man als Rückgabetyp „void“ an was soviel wie „leer“ heißt.
Danach folgt der Funktionsname, diesen können wir frei wählen. Schließlich folgt die Parameterliste, innerhalb derer angegeben wird, welche Variablen oder Objekte bei einem Aufruf der Funktion übergeben werden können. Eine Funktion kann aber auch ohne Parameter definiert werden (d.h. es ist dann nicht möglich, ihr Parameter zu übergeben), dann bleibt die Parameterliste leer. Parameter in der Parameterliste werden in der Form
TYP NAME
angegeben, und mehrere Parameter werden durch Komma voneinander getrennt.
Wir werden zur Verdeutlichung den Code aus dem vorigen Abschnitt, bei dem wir eine Summe berechnet haben, einmal als Funktion schreiben.
unsigned int berechneSumme(unsigned int n) { int sum = 0; for (unsigned int i = 0; i <= n; ++i) { sum = sum + i; } return sum; }
Rückgabetyp ist also unsigned int - wir wollen am Ende eine nicht-negative Ganzzahl eben als die berechnete Summe zurück geben. Wir nennen die Funktion berechneSumme, weil man so bereits vom Namen erkennen kann, welchen Zweck die Funktion erfüllen soll. Als Parameter soll eine Variable vom Typ unsigned int übergeben werden, wir nennen diese Variable n. Innerhalb des folgenden Funktionsrumpfes kann die Variable dann über diesen Namen angesprochen werden.
Programmieren mit C++ - Einige unserer Empfehlungen
Der Funktionsrumpf, der danach innerhalb eines geschweiften Klammerpaares folgt, unterscheidet sich nun nicht so sehr von unseren vorherigen Beispiel zur Berechnung der Summe mittels for-Schleife. Wir haben lediglich den Wert 10, der zuvor als fester "Endpunkt" im Code verankert war, durch die Variable n ersetzt. Nun kann man durch Aufruf der Funktion und durch die Übergabe verschiedener Parameter als n-Wert verschiedene Summen berechnen.
Die Funktion wird abgeschlossen durch die return-Anweisung. In dieser Anweisung wird nun einfach der Wert der sum-Variable an die aufrufende Stelle zurück gegeben.
Benutzen kann man diese Methode dann (z.B. im Hauptprogramm) wie folgt:
unsigned int summe1 = berechneSumme(10); unsigned int summe2 = berechneSumme(20);
summe1 hat also dann den Wert 55, während summe2 den Wert 210 hat.
Fortgeschrittene Konzepte wie Objektorientierung
In den vorangegangenen Abschnitten haben wir einige grundlegende Konzepte von C++ kennen gelernt. Diese Konzepte sollten Ihnen dabei helfen, einen großen Überblick über die Systematik der Programmierens mit C++ zu bekommen. Die meisten Themen haben wir nur recht oberflächlich behandelt und sind nicht ins Detail gegangen. Ebenso wurden zentrale Konzepte wie Objektorientierung und Speicherverwaltung komplett außen vor gelassen. Diese Themen im Detail zu behandeln, würde den Rahmen dieses Tutorials sprengen. Wir verweisen daher auf unsere Literaturempfehlungen. Wenn Sie dieses Tutorial durchgearbeitet haben und auch verstanden haben, haben Sie bereits einen wichtigen Grundstein gelegt, um mit Hilfe des richtigen Fachbuches das Programmieren nun richtig erlernen zu können.
Zu Teil 1: Grundlagen von C++ und Compiler
Zu Teil 2: Das erste C++-Programm
Zu Teil 3: Variablen, Ausdrücke und Ablaufsteuerung in C++
Teil 4: Funktionen in C++
Eine ausführliche Liste unserer Buchempfehlungen für C++ finden Sie hier.
Unsere Buchempfehlungen
Oder sehen Sie sich die vollständige Liste der Empfehlungen für C++ an.Wir haben auch eine Empfehlung für einen C++-Fernkurs parat.