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.

246 9. Klassen <strong>in</strong> <strong>C++</strong><br />

e<strong>in</strong>en Gedanken ist es schon wert, ob man nicht e<strong>in</strong>e genauso schöne Lösung<br />

ohne Downcasts f<strong>in</strong>det.<br />

Vorsicht Falle: Nur allzu oft werden abstruseste Annahmen getroffen, dass<br />

“sowieso nur e<strong>in</strong> Objekt von genau diesem Typ” hier vorkommen kann. Solange<br />

dies allerd<strong>in</strong>gs nicht durch irgende<strong>in</strong>e Maßnahme (z.B. <strong>in</strong> unserem Beispiel<br />

das <strong>in</strong>terne Speichern des Typs) sichergestellt ist, können durch Programmfehler<br />

oder nach Programmänderungen die tollsten Effekte e<strong>in</strong>treten.<br />

Und e<strong>in</strong> Programm nach Downcast-Fehlern zu durchsuchen, hat bei Entwicklern<br />

üblicherweise akute Magenschmerzen gepaart mit übertriebenem Haarausfall<br />

durch äußere E<strong>in</strong>wirkung von stark zupackenden und an den Haaren<br />

ziehenden Händen zur Folge.<br />

Vorsicht Falle: Auch wenn e<strong>in</strong>e Maßnahme die korrekte Typwandlung<br />

quasi sicherstellt, ist man noch lange nicht vor “echten” Programmfehlern<br />

geschützt. Wer sagt, dass nicht aufgrund e<strong>in</strong>es Fehlers e<strong>in</strong>mal e<strong>in</strong> falscher Typ<br />

<strong>in</strong> der Variable vermerkt wird (typische Copy-and-Paste Folgeersche<strong>in</strong>ung)?<br />

Solche Fehler können nur durch ausführliches und s<strong>in</strong>nvolles Testen gefunden<br />

und behoben werden. Trotzdem muss e<strong>in</strong> entsprechender Fehlerbehandlungscode<br />

immer im Programm erhalten bleiben, denn auch ausführliches Testen<br />

schützt noch nicht zu 100%!<br />

Vorsicht Falle: Die Funktionsweise der verschiedenen Cast-Operatoren<br />

wird leider sehr oft nicht vollständig durchschaut, bzw. deren Existenz überhaupt<br />

ignoriert und mit dem “guten alten” C-Style Cast gearbeitet. Es gibt<br />

aber nicht von ungefähr die verschiedenen Cast-Operatoren. Durch den E<strong>in</strong>satz<br />

der “falschen” Operatoren lassen sich herrliche Zeitbomben basteln. In<br />

der Folge wird der Unterschied zwischen den e<strong>in</strong>zelnen Operatoren noch e<strong>in</strong>mal<br />

genau umrissen. Als Grundregel für Downcasts möchte ich den Lesern<br />

Folgendes auf den Weg geben:<br />

Pr<strong>in</strong>zipiell ist bei Downcasts e<strong>in</strong> dynamic_cast zu verwenden.<br />

Um das Bild abzurunden, hier noch e<strong>in</strong>mal e<strong>in</strong>e Zusammenfassung, was<br />

die e<strong>in</strong>zelnen Cast-Operatoren genau tun. Ich lasse <strong>in</strong> dieser Zusammenfassung<br />

bewusst den const_cast und den C-Style Cast aus, denn diese s<strong>in</strong>d<br />

für unsere Betrachtungen hier belanglos. Leser, die sich mittlerweile nicht<br />

mehr so sicher s<strong>in</strong>d, was diese beiden tun, möchte ich auf Abschnitt 3.6.5<br />

und Abschnitt 3.6.6 verweisen.<br />

dynamic_cast: Dieser Cast überprüft zur Laufzeit des Programms, ob e<strong>in</strong>e<br />

Umwandlung zum gewünschten Typ tatsächlich möglich ist. Wenn<br />

ne<strong>in</strong>, dann bewirkt bereits die Anweisung mit der Anwendung des Casts<br />

e<strong>in</strong>en Laufzeitfehler.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!