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.

62 3. Operatoren<br />

die Umwandlung <strong>in</strong> diesen Typ erfolgen soll. Vor allem im OO-Teil werden<br />

wir noch viele Beispiele zu dieser Thematik kennen lernen.<br />

Im Unterschied zu C, das nur e<strong>in</strong>en e<strong>in</strong>zigen Cast-Operator kennt, gibt es<br />

<strong>in</strong> C ++ mehrere verschiedene Operatoren dafür. Außerdem existiert <strong>in</strong> C ++<br />

auch e<strong>in</strong> Mechanismus, zur Laufzeit Information über den Typ von Variablen<br />

zu erhalten, die sogenannte Run-Time-Type-Information (kurz: RTTI ).<br />

Ganz bewusst möchte ich bei der Besprechung von Typecasts nicht mit<br />

den sogenannten C-Style Casts beg<strong>in</strong>nen, die allen Lesern mit C-Vorbildung<br />

im Pr<strong>in</strong>zip bekannt s<strong>in</strong>d. Das Problem hierbei ist nämlich, dass diese C-<br />

Style Casts <strong>in</strong> C ++ eigentlich e<strong>in</strong>e Komb<strong>in</strong>ation aus mehreren Möglichkeiten<br />

s<strong>in</strong>d, wie man Typen umwandeln kann. Diese Möglichkeiten be<strong>in</strong>halten auch<br />

solche, die auf RTTI zurückgreifen, um Casts korrekt ausführen zu können.<br />

Daher möchte ich <strong>in</strong> diesem Kapitel zunächst Type-Identification und RTTI,<br />

danach die verschiedenen zur Verfügung stehenden Cast-Operatoren und erst<br />

am Ende den klassischen C-Style Cast besprechen.<br />

Obwohl das Thema der Casts <strong>in</strong> der Folge sehr genau besprochen wird,<br />

möchte ich trotzdem, quasi “zum Aufwärmen”, den Lesern Kapitel 13 aus<br />

<strong>Softwareentwicklung</strong> <strong>in</strong> C empfehlen.<br />

Vorsicht Falle: Entwickler, die e<strong>in</strong>ige Erfahrung mit C und mit älteren Versionen<br />

von C ++ haben, neigen dazu, bei weitem öfter als notwendig explizite<br />

Casts e<strong>in</strong>zusetzen. Egal, um welche Variante der <strong>in</strong> der Folge vorgestellten<br />

Casts es sich handelt, ungefährlich s<strong>in</strong>d sie im Pr<strong>in</strong>zip alle nicht. Neuere<br />

C ++ Versionen können <strong>in</strong> sehr vielen Situationen implizite Casts vornehmen,<br />

die von alten C ++ Versionen und <strong>in</strong>sbesondere auch von C noch nicht durchgeführt<br />

wurden.<br />

Um nun ke<strong>in</strong>e Zeitbomben <strong>in</strong> e<strong>in</strong> Programm e<strong>in</strong>zubauen, sollte man unbed<strong>in</strong>gt<br />

folgenden Tipp beherzigen: Casts sollen nur dort verwendet werden,<br />

wo sie unbed<strong>in</strong>gt notwendig s<strong>in</strong>d. Im Fall, dass man sich nicht sicher ist,<br />

ob man e<strong>in</strong>en Cast braucht oder nicht, schreibt man am besten nicht <strong>in</strong> vorauseilendem<br />

Gehorsam e<strong>in</strong>en expliziten Cast. Das schlimmste was dadurch<br />

passieren kann ist, dass sich der Compiler beschwert. Danach kann man den<br />

Cast immer noch ergänzen.<br />

3.6.1 Type Identification und Run-Time-Type-Information<br />

In diesem Abschnitt wird e<strong>in</strong> Feature von C ++ besprochen, dass es <strong>in</strong> C<br />

überhaupt nicht gibt: Die Möglichkeit, den Typ e<strong>in</strong>es Objekts (z.B. e<strong>in</strong>er<br />

Variable) herauszuf<strong>in</strong>den.<br />

Leider muss ich hier e<strong>in</strong>en kle<strong>in</strong>en Spagat <strong>in</strong> Bezug auf die Struktur dieses<br />

Buchs machen, denn bei den Themen Type Identification und RTTI bekommen<br />

wir es plötzlich mit Klassen zu tun, weil dies <strong>in</strong> der Natur der hierfür

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!