Zum Inhalt springen

Referenz (Programmierung)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 1. Juli 2015 um 10:23 Uhr durch RokerHRO (Diskussion | Beiträge) (Referenzen in C++: redundanten Text entfernt, Kommentar klarer gefasst). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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:

  1. Als (kürzerer oder verständlicherer) Aliasname für ein bereits bestehendes Objekt
  2. Zur Optimierung, um Kopien von Objekten zu vermeiden
  3. In speziellen Memberfunktionen, wie Copy- & Move-Konstruktoren und Zuweisungsoperatoren
  4. 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.