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.

6.1 References 109<br />

werden müsste, um den Funktionsaufruf durchzuführen. Dementsprechend<br />

f<strong>in</strong>det der Aufruf dieser Funktion, z.B. <strong>in</strong> Zeile 26, ohne jegliche explizite<br />

Po<strong>in</strong>terkonstrukte e<strong>in</strong>fach nur durch Übergabe der entsprechenden struct<br />

Variable statt.<br />

Obwohl dies alle<strong>in</strong> schon e<strong>in</strong>e merkliche Verbesserung im Vergleich zu C<br />

darstellt, ist es allerd<strong>in</strong>gs noch immer nicht der Weisheit letzter Schluss, wie<br />

uns die Funktion changeStruct <strong>in</strong> den Zeilen 41–45 zeigt: Hier wird der<br />

Inhalt der übergebenen Structure nachhaltig verändert. Dies funktioniert<br />

natürlich, weil wir es ja mit e<strong>in</strong>em call-by-reference zu tun haben. Dadurch,<br />

dass es sich um e<strong>in</strong>e Funktion mit dem Namen changeStruct handelt, ist<br />

auch für alle Entwickler zu erwarten, dass sich etwas ändert und dementsprechend<br />

ist dieses Verhalten noch <strong>in</strong>tuitiv. Wer aber h<strong>in</strong>dert z.B. die Funktion<br />

show daran, die Structure zu verändern? Müssen sich alle Entwickler ab jetzt<br />

bei jedem Aufruf e<strong>in</strong>er Funktion, die e<strong>in</strong>en struct Parameter nimmt, Sorgen<br />

machen, dass etwas nachhaltig geändert wird, auch wenn sie es nicht erwarten?<br />

Hoffentlich nicht, denn damit würden Unmengen an Code geschrieben<br />

werden müssen, um auf diesen Umstand auch entsprechend Rücksicht zu nehmen.<br />

Tatsächlich gibt es e<strong>in</strong>e Möglichkeit, wie man e<strong>in</strong>e unerwartete Veränderung<br />

verh<strong>in</strong>dern kann: Man verwendet e<strong>in</strong>e explizit konstante Referenz. Wie<br />

das geht, zeigt das folgende Beispiel (struct_ref_clean_demo.cpp):<br />

1 // s t r u c t r e f c l e a n d e m o . cpp − demo f o r clean use o f s t r u c t r e f s<br />

2<br />

3 #<strong>in</strong>clude <br />

4 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

5<br />

6 us<strong>in</strong>g std : : cout ;<br />

7 us<strong>in</strong>g std : : endl ;<br />

8<br />

9 struct TestStruct<br />

10 {<br />

11 <strong>in</strong>t32 a member ;<br />

12 <strong>in</strong>t32 another member ;<br />

13 } ;<br />

14<br />

15 void show ( const struct TestStruct & t h e s t r u c t ) ;<br />

16<br />

17 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

18 <strong>in</strong>t ma<strong>in</strong> ( <strong>in</strong>t argc , char ∗ argv [ ] )<br />

19 {<br />

20 struct TestStruct a s t r u c t ;<br />

21<br />

22 a s t r u c t . a member = 17;<br />

23 a s t r u c t . another member = 20;<br />

24<br />

25 show ( a s t r u c t ) ;<br />

26 return ( 0 ) ;<br />

27 }<br />

28<br />

29 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

30 void show ( const struct TestStruct & t h e s t r u c t )<br />

31 {<br />

32 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!