Übergabe per Referenz

Beispielprogramm: UEBREF.CPP

Das Programm UEBREF.CPP ist ein Beispiel für die Übergabe per Referenz, ein Konzept, das in ANSI-C nicht verfügbar ist. Wir haben die Referenzvariable in Kapitel 1 schon erwähnt und gleichzeitig festgehalten, daß Du es vermeiden solltest, sie so einzusetzen, wie wir es dort getan haben. Dieses Programm zeigt eine Situation, wo wir sie sehr zu unserem Vorteil verwenden. Die Übergabe per Referenz erlaubt es uns, einer Funktion eine Variable zu übergeben, wobei alle Änderungen an der Variable innerhalb der Funktion an das Hauptprogramm Übergeben werden. In ANSI-C wird derselbe Effekt durch die Übergabe eines Zeigers auf die Variable erreicht, aber die Verwendung einer Referenz ist ein wenig sauberer.

Beachte, daß die zweite Variable im Prototypen in Zeile 5 ein & vor dem Variablennamen hat. Dies weist den Compiler an, diese Variable wie einen Zeiger auf die eigentliche Variable zu behandeln. So wird praktisch die eigentliche Variable vom Hauptprogramm in der Funktion verwendet. In der Funktion selbst wird die Variable Ein2 in den Zeilen 24 bis 27 genauso verwendet wie jede andere auch, aber sie verhält sich, als würden wir die eigentliche vom Hauptprogramm übergebene Variable verwenden und nicht eine Kopie davon. Die andere Variable, Ein1, wird wie eine ganz normale ANSI-C Variable verwendet. Der Variablenname Ein2 ist also ein Synonym für die Variable Index im Hauptprogramm, der Name Ein1 hingegen bezieht sich auf eine Kopie der Variable Zaehler im Hauptprogramm. Im Gebrauch wird ein Zeiger an die Funktion übergeben und automatisch dereferenziert, wenn er in der Funktion verwendet wird. Das ist Dir, der Programmiererin, natürlich klar.

Wenn Du es vorziehst, die Variablennamen im Prototypen wegzulassen, sähe Dein Prototyp folgendermaßen aus: void Pfusche(int, int &);

Als Pascal Programmiererin wirst Du bemerkt haben, daß die Variable Ein1 wie ein normaler Parameter in einem Pascal-Funktionsaufruf behandelt wird, ein Aufruf per Wert. Die Variable Ein2 allerdings wird behandelt wie eine Variable mit dem reservierten Wort VAR davor, was üblicherweise Aufruf per Referenz genannt wird. Wie wir schon festgestellt haben, ist eine Referenzvariable in C++ eigentlich ein sich selbst dereferenzierender Zeiger, der sich auf den eigentlichen Wert bezieht, beziehungsweise darauf zeigt.

Wenn Du dieses Programm kompilierst und dann ausführst, wirst Du bemerken, daß die erste Variable in der Funktion zwar geändert wurde, aber wieder ihren alten Wert erhält, wenn wir zum Hauptprogramm zurückkehren. Auch die zweite Variable wurde in der Funktion geändert, diese Änderung spiegelt sich aber auch im Hauptprogramm wieder, was wir erkennen, wenn die Werte der Variablen am Bildschirm ausgegeben werden. Es sollte jetzt klar sein, daß eine Referenz es Dir erlaubt, einen Parameter per Referenz an eine Funktion zu übergeben. Wenn Du erst einmal ein wenig Erfahrung mit Referenzen gesammelt hast, wirst Du sie einsetzen, um die Effizienz einiger Deiner Programme zu steigern. Die Übergabe einer großen Struktur kann mit einer Referenz sehr effizient gestaltet werden.

(weiter...)

-->