Referenz (Programmierung) - LinkFang.de





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:

  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.

Es gibt in C++ sogenannte Lvalue-Referenzen, die durch ein an den Typ angehängtes & gekennzeichnet werden, und (seit C++11) zusätzlich noch Rvalue-Referenzen, die durch && gekennzeichnet werden.

Codebeispiele

Unterschied von Referenz und Kopie:

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.

Parameterübergabe als Referenz:

void quadrieren(int& x) {
    x = x * x;
}
 
int main() {
    int i = 5;
    quadrieren(i);  // Funktionsaufruf ändert den Wert von i auf 25
}

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

Klassendesign:

class Kunde
{
public:
    explicit Kunde(const std::string& name);  // 'name' wird aus Effizienzgründen nur als const-Referenz übergeben
    explicit Kunde(std::string&& name);       // Rvalue-Referenz, erlaubt ein "move" aus dem Namen (seit C++11)
 
    Kunde(const Kunde& other);  // Copy-Konstruktor
    Kunde(Kunde&& other);       // Move-Konstruktor (seit C++11)
 
    const std::string& getName() const;  // gibt const-Referenz auf Kundennamen zurück
    std::string&& getName() &&;  // gibt Rvalue-Referenz zurück, falls Objekt selbst ein RValue ist (ab C++11)};

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.


Kategorien: Programmiersprachelement

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Referenz (Programmierung) (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.