30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

126 6. Po<strong>in</strong>ter und References<br />

durch die Objektorientierung von C ++ im Gegensatz zu C nur noch sehr wenige<br />

E<strong>in</strong>satzgebiete derselben existieren. Es gibt viel sauberere Konstrukte,<br />

die dieselbe Aufgabe erfüllen. Salopp gesagt sollte man eigentlich im normalen<br />

Entwicklungsalltag die F<strong>in</strong>ger von Funktionspo<strong>in</strong>tern lassen. Deshalb<br />

wurde die Diskussion über sie auch sehr weit nach h<strong>in</strong>ten verlegt, nämlich <strong>in</strong><br />

Abschnitt 15.3 :-).<br />

6.2.5 Besondere Aspekte von Po<strong>in</strong>tern<br />

Po<strong>in</strong>ter s<strong>in</strong>d pr<strong>in</strong>zipiell mit e<strong>in</strong>em hohen Fehlerrisiko verbunden, aber sie s<strong>in</strong>d<br />

aus vielerlei Gründen <strong>in</strong> C ++ nicht wegzudenken. Was auch immer bisher zu<br />

Po<strong>in</strong>tern gesagt wurde und <strong>in</strong> der Folge noch gesagt wird, gehört zum täglichen<br />

Brot von C ++ Entwicklern. Allerd<strong>in</strong>gs möchte ich an dieser Stelle noch<br />

unbed<strong>in</strong>gt darauf h<strong>in</strong>weisen, dass im OO-Teil des Buchs e<strong>in</strong>ige Möglichkeiten<br />

besprochen werden, wie man potentielle Fehlerquellen elim<strong>in</strong>ieren kann, <strong>in</strong>dem<br />

man Po<strong>in</strong>ter sauber <strong>in</strong> Classes kapselt, anstatt sie “wild” im laufenden<br />

Programmcode zu verwenden. Trotz aller Warnungen möchte ich trotzdem<br />

alle Leser dazu motivieren, sich mit Po<strong>in</strong>tern ausgiebig zu spielen, denn dies<br />

ist die beste Möglichkeit, e<strong>in</strong> gutes Gefühl dafür zu bekommen. Es sollten<br />

jedoch die derzeitigen “Spielereien” der Leser nicht <strong>in</strong> wichtigen (also produktmäßigen)<br />

Programmcode e<strong>in</strong>fließen. Ok, genug gewarnt, kommen wir<br />

wieder zurück zum Thema der besonderen Aspekte von Po<strong>in</strong>tern.<br />

Call-by-reference auf Po<strong>in</strong>ter. Auch Po<strong>in</strong>tervariablen können natürlich<br />

Teilnehmer an e<strong>in</strong>em call-by-reference se<strong>in</strong>, der den Inhalt des Po<strong>in</strong>ters selbst,<br />

also die Adresse auf die er zeigt, nachhaltig verändert. Wie das typisch<br />

für C ++ mittels References gelöst wird, sieht man an folgendem Programm<br />

(ptr_call_by_ref_demo.cpp):<br />

1 // p t r c a l l b y r e f d e m o . cpp − c a l l by r e f e r e n c e with p o i n t e r 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 void assignClone ( <strong>in</strong>t32 ∗& dst , const <strong>in</strong>t32 s r c [ ] , u<strong>in</strong>t32 length ) ;<br />

10<br />

11 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

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

13 {<br />

14 const u<strong>in</strong>t32 ARRAY LENGTH = 10;<br />

15 <strong>in</strong>t32 ∗ s r c a r r a y = new <strong>in</strong>t32 [ARRAY LENGTH] ;<br />

16 <strong>in</strong>t32 ∗ d s t a r r a y = 0;<br />

17<br />

18 for ( u<strong>in</strong>t32 count = 0; count < ARRAY LENGTH; count++)<br />

19 s r c a r r a y [ count ] = count ;<br />

20<br />

21 assignClone ( d s t a r r a y , s r c a r r a y ,ARRAY LENGTH) ;<br />

22<br />

23 <strong>in</strong>t32 ∗ s r c i t e r a t i o n p t r = s r c a r r a y ;<br />

24 <strong>in</strong>t32 ∗ d s t i t e r a t i o n p t r = d s t a r r a y ;

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!