C++
VeröffentlichtRevision 1

Parameter: Wertübergabe, Referenz und Überladung

Bei Wertübergabe, englisch pass by value, bekommt der Parameter einen eigenen Wert. Bei void erhoehen(int zahl) verändert ++zahl daher nicht die ursprüngliche int-Variable des Aufrufers.

Parameter: Wertübergabe, Referenz und Überladung#

Funktionen und Programmaufbau · Lektion 23 von 60

Voraussetzungen: Funktionen, Strings. Lernziel: Du entscheidest, ob eine Funktion eine Kopie oder das Original erhält.

Bei Wertübergabe, englisch pass by value, bekommt der Parameter einen eigenen Wert. Bei void erhoehen(int zahl) verändert ++zahl daher nicht die ursprüngliche int-Variable des Aufrufers.

Eine Referenz ist ein weiterer Name für ein vorhandenes Objekt. Referenzübergabe, pass by reference, erlaubt einer Funktion damit den Zugriff auf das Original. Das & in einer Parameterdeklaration kennzeichnet diese Beziehung.

C++
1#include <iostream>2#include <string>3 4void kopieErhoehen(int zahl) {5    ++zahl;6}7 8void originalErhoehen(int& zahl) {9    ++zahl;10}11 12void anzeigen(const std::string& text) {13    std::cout << text << '\n';14}15 16int main() {17    int wert{4};18    kopieErhoehen(wert);19    std::cout << wert << '\n';20    originalErhoehen(wert);21    std::cout << wert << '\n';22    anzeigen("Fertig");23}

Es erscheinen 4, 5 und Fertig. const std::string& ist eine Referenz, über die der Text nicht verändert werden darf. So muss für einen vorhandenen String nicht allein zum Lesen eine vollständige Kopie angelegt werden. Beim gezeigten Stringliteral entsteht ein temporärer String für den Aufruf. Temporär bedeutet vorübergehend für die Auswertung vorhanden.

Eine einfache Auswahlregel#

Kleine Werte wie int und double übergibst du gewöhnlich als Wert. Einen größeren vorhandenen String kannst du zum Lesen als const-Referenz übergeben. Soll das Original verändert werden, drücke das bewusst mit einer nichtkonstanten Referenz und einem eindeutigen Funktionsnamen aus.

Überladung und Standardargumente#

Überladung erlaubt mehrere gleichnamige Funktionen mit verschiedenen Parameterlisten, etwa eine Variante für int und eine für double. Nur der Rückgabetyp genügt nicht zur Unterscheidung. ambiguous call bedeutet, dass der Compiler keinen eindeutig besten passenden Aufruf findet.

Ein Standardargument wird benutzt, wenn der Aufrufer ein entsprechendes Argument weglässt. Bei einer Deklaration void drucken(int anzahl = 1); ist 1 dieser Ersatzwert. Halte solche Vorgaben gut sichtbar und schreibe sie nicht widersprüchlich in mehrere Deklarationen.

Übung#

Warum kann originalErhoehen(4) nicht so verwendet werden wie originalErhoehen(wert)?

Lösung

Die Funktion verlangt eine veränderbare Referenz auf ein passendes bestehendes Objekt. Das Literal 4 ist kein solcher veränderbarer int-Speicherplatz. Für ein berechnetes neues Ergebnis ist eine Rückgabe oft die bessere Schnittstelle.

Weiterlernen#

Zurück: Eigene Funktionen definieren und aufrufen · Kursübersicht · Weiter: Gültigkeitsbereiche und Namensräume

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.