30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

46 void changeVariable ( <strong>in</strong>t32 &var )<br />

47 {<br />

48 var /= 2;<br />

49 }<br />

6.1 References 105<br />

Der Output dieses Programms zeigt sehr schnell, was es mit References so<br />

auf sich hat:<br />

my var : 1 2 , my ref : 1 2<br />

my var : 2 4 , my ref : 2 4<br />

my var : 4 8 , my ref : 4 8<br />

my var : 2 4 , my ref : 2 4<br />

my var : 1 2 , my ref : 1 2<br />

Beg<strong>in</strong>nen wir mit der Analyse des Programms <strong>in</strong> Zeile 14: Dort wird e<strong>in</strong>e<br />

ganz normale <strong>in</strong>t32 Variable namens my_var def<strong>in</strong>iert. In der folgenden Zeile<br />

15 allerd<strong>in</strong>gs f<strong>in</strong>det sich e<strong>in</strong>e Variablendef<strong>in</strong>ition, die uns bisher noch nicht<br />

untergekommen ist. Genau dies ist die Def<strong>in</strong>ition e<strong>in</strong>er Reference. Um e<strong>in</strong>e<br />

Variable als Reference Variable zu def<strong>in</strong>ieren, wird dem Variablennamen bei<br />

der Def<strong>in</strong>ition e<strong>in</strong> & vorangestellt. Worauf die Reference zeigt, wird durch deren<br />

Initialisierung festgelegt. In unserem Fall referenziert my_ref die Variable<br />

my_var, das bedeutet, beide Variablen beziehen sich auf denselben Platz im<br />

Speicher!<br />

In den Zeilen 19–30 sieht man, dass man tatsächlich beide Variablen alternativ<br />

verwenden kann. Egal, was man mit e<strong>in</strong>er von ihnen macht, das<br />

Ergebnis ist immer <strong>in</strong> der jeweils anderen auch zu sehen. Was auch sonst,<br />

beziehen sich die beiden doch auf dieselbe Speicherstelle. Das Schöne im Gegensatz<br />

zu “echten” Po<strong>in</strong>tern ist hierbei, dass man sich überhaupt nicht um<br />

die Dereferenzierung kümmern muss. E<strong>in</strong>e Reference Variable wird e<strong>in</strong>fach<br />

ganz gleich im laufenden Code verwendet wie e<strong>in</strong>e normale Variable, der Rest<br />

passiert h<strong>in</strong>ter den Kulissen.<br />

Für Entwickler, die bisher nur mit C zu tun hatten, mag dieses Verhalten<br />

ungewohnt se<strong>in</strong>, vor allem liest sich z.B. die Zeile 15 für solche Entwickler etwas<br />

komisch. Dort wird my_ref im Pr<strong>in</strong>zip auf e<strong>in</strong>e Adresse <strong>in</strong>itialisiert, aber<br />

die Schreibweise suggeriert irgendwie, dass e<strong>in</strong>e Zuweisung des Inhalts stattf<strong>in</strong>det.<br />

Dieses komische Gefühl verschw<strong>in</strong>det allerd<strong>in</strong>gs sehr schnell, wenn<br />

man sich erst e<strong>in</strong>mal an die Arbeit mit den wirklich sehr praktischen References<br />

gewöhnt hat.<br />

Vielfach ist <strong>in</strong> der Literatur erwähnt, dass es sich bei References im Pr<strong>in</strong>zip<br />

um alternative Namen handelt. Betrachtet man unser Beispiel, so versteht<br />

man auch sehr schnell, wieso es zu dieser Bezeichnung kommt. Jedoch<br />

verschleiert der Begriff der alternativen Namen völlig, dass ja eigentlich e<strong>in</strong>e<br />

Reference Variable viel mehr als nur quasi e<strong>in</strong> Alias ist. Sie ist tatsächlich<br />

e<strong>in</strong>e alternative Zugriffsmöglichkeit. Aus diesem Grund möchte ich allen<br />

Lesern ans Herz legen, den Begriff der alternativen Namen nicht zu verwenden.<br />

In den Zeilen 46–49 ist e<strong>in</strong>e Funktion def<strong>in</strong>iert, die von e<strong>in</strong>er Reference<br />

Gebrauch macht, um e<strong>in</strong>en call-by-reference, also e<strong>in</strong> nachhaltiges Verändern

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!