Referenz (Programmierung)
Eine Referenz ist ein Verweis auf ein Objekt. Eine Referenz ist damit ein Aliasname für ein bereits bestehendes Objekt.
Referenzen in C++
In C++ werden Referenzen sehr häufig und für verschiedene Zwecke eingesetzt:
- Als (kürzerer oder verständlicherer) Aliasname für ein bereits bestehendes Objekt
- Zur Optimierung, um Kopien von Objekten zu vermeiden
- In speziellen Memberfunktionen, wie Copy- & Move-Konstruktoren und Zuweisungsoperatoren
- Als sogenannte universelle Referenz (engl: universal reference), die bei Templates einen beliebigen Parametertyp repräsentiert.
Wirkungsweise einer Referenz
int original = 5;
int kopie = original;
int& referenz = original;
kopie = 30; // weist der Kopie den Wert 30 zu. Das Original bleibt unverändert
referenz = 20; // weist der Referenz – und somit auch dem Original – den Wert 20 zu
original = 10; // ändert das Original, womit aber auch die Referenz ihren Wert ändert.
Beispiel zur Parameterübergabe als Referenz, siehe auch Referenzparameter
void quadrieren(int& x) {
x = x * x;
}
int main() {
int i = 5;
quadrieren(i); // Funktionsaufruf ändert den Wert von i auf 25
}
Beispiel für Objektreferenzen
Bank& nBank = Bankenverzeichnis::nachBLZ("76543210"); // eine Referenz auf ein Bankobjekt wird beschafft
Konto& nKonto1 = nBank.kontoZugriff("1234567"); // eine Referenz auf ein bestimmtes Kontoobjekt wird beschafft
Konto& nKonto2 = nBank.kontoZugriff("1111111"); // eine Referenz auf ein weiteres Kontoobjekt wird beschafft
nKonto1.einzahlung(100.00, "EUR", nKonto2); // eine Methode wird auf nKonto1 gerufen
Beispiel in Pascal
Übergabe by reference (der Wert der übergebenen Variablen wird geändert)
procedure quadriere(var wert: integer);
begin
wert := wert * wert;
end;
Dieser Prozedur kann nur eine Variable übergeben werden, kein Ausdruck. wert
ist der lokale Name der als Referenz übergebenen Variablen; mit der Zuweisung eines Werts wird direkt der Inhalt der übergebenen Variablen geändert.
Übergabe by value (also nur des Werts, nicht der Variablen selbst; der Wert der übergebenen Variablen wird nicht geändert)
function quadrat(wert: integer): integer;
begin
Result := wert * wert;
end;
Selbst wenn eine Zuweisung an wert
erfolgen würde, würde dies den Inhalt einer etwa übergebenen Variablen nicht ändern: Übergeben wird nur ein Wert; der Bezeichner wert
steht für eine lokale Variable, die nur innerhalb der Funktion gültig ist.