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.

9.4 Weitere wichtige technische Aspekte 253<br />

Vorsicht Falle: Bei Neul<strong>in</strong>gen gibt es öfters großes Staunen, warum sich der<br />

Compiler beschwert, dass er e<strong>in</strong>en Member e<strong>in</strong>er Klasse nicht <strong>in</strong>itialisieren<br />

kann. Sehr oft liegt der Grund dar<strong>in</strong>, dass vergessen wurde, im Konstruktor<br />

der Klasse die notwendige explizite Initialisierung bei nicht-Vorhandense<strong>in</strong><br />

e<strong>in</strong>es default Konstruktors dieses Members anzugeben. E<strong>in</strong> Blick auf die<br />

Deklaration der Klasse des problematischen Members lohnt sich zumeist, um<br />

hier Klarheit zu schaffen.<br />

An dieser Stelle muss noch erwähnt werden, dass die spezielle Schreibweise<br />

zur Initialisierung nicht nur für benutzerdef<strong>in</strong>ierte Objekte funktioniert,<br />

sondern auch auf primitive Datentypen anwendbar ist. Aus Gründen der<br />

E<strong>in</strong>heitlichkeit und aus anderen, noch viel wichtigeren Gründen, die <strong>in</strong> Kapitel<br />

11 noch genauer beleuchtet werden, wird dr<strong>in</strong>gend empfohlen, diese<br />

Art der Initialisierung der e<strong>in</strong>fachen Zuweisung <strong>in</strong>nerhalb e<strong>in</strong>es Konstruktors<br />

vorzuziehen.<br />

9.4.8 Temporäre Objekte<br />

Temporäre Objekte s<strong>in</strong>d Objekte, die nicht über e<strong>in</strong>en Variablennamen ansprechbar<br />

s<strong>in</strong>d, sondern nur als Speicher für Zwischenergebnisse bei der Abarbeitung<br />

von Expressions dienen. Sobald die entsprechende Expression ausgewertet<br />

ist, werden diese temporären Objekte wieder verworfen. Wenn sie<br />

schon ke<strong>in</strong>e echten Variablen s<strong>in</strong>d und auch nicht über e<strong>in</strong>en Variablennamen<br />

angesprochen werden können, wie entstehen und verschw<strong>in</strong>den sie dann?<br />

Ganz e<strong>in</strong>fach: Dafür ist e<strong>in</strong>zig und alle<strong>in</strong> der Compiler verantwortlich. Am<br />

leichtesten ist dies anhand der Auswertung von mathematischen Ausdrücken<br />

zu verstehen. Analysieren wir e<strong>in</strong>fach e<strong>in</strong>mal die schrittweise Abarbeitung<br />

der Expression<br />

result = var1 + var2 + (var3 + var4) * var5;<br />

Es ist belanglos, welchen Datentyp unsere e<strong>in</strong>zelnen Variablen und das Ergebnis<br />

haben, der Compiler wertet den Ausdruck pr<strong>in</strong>zipiell so aus:<br />

1. Es wird die Addition von var1 und var2 durchgeführt. Das Ergebnis<br />

dieser Addition wird <strong>in</strong> e<strong>in</strong>em temporären Objekt abgelegt, nennen wir<br />

es e<strong>in</strong>fach e<strong>in</strong>mal temp1. Was sollte der Compiler auch sonst mit dem<br />

Ergebnis tun? Er darf weder var1 noch var2 verändern, also muss er<br />

das Ergebnis irgendwo anders zwischenspeichern.<br />

2. Im nächsten Schritt wird die Addition von var3 und var4 vorgenommen.<br />

Das Resultat landet zwangsweise wieder <strong>in</strong> e<strong>in</strong>em temporären Objekt, das<br />

wir hier als temp2 bezeichnen wollen.<br />

3. Das temporäre Objekt temp2 wird mit var5 multipliziert, was erneut e<strong>in</strong><br />

temporäres Objekt ergibt. Nennen wir dieses temp3.<br />

4. Nun werden temp1 und temp3 addiert, was erneut e<strong>in</strong> temporäres Objekt<br />

ergibt, das wir mit temp4 bezeichnen wollen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!