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.

3.6 Datentypabfragen und explizite Typecasts 65<br />

Von Zeile 10 bis Zeile 23 f<strong>in</strong>det man die Deklaration e<strong>in</strong>er Structure, e<strong>in</strong>er<br />

Union und zwei entsprechende typedef-Statements, die später zu Demonstrationszwecken<br />

verwendet werden.<br />

Die Variable test_var, die <strong>in</strong> Zeile 27 def<strong>in</strong>iert wird, ist auch noch ke<strong>in</strong>e<br />

Besonderheit, allerd<strong>in</strong>gs das Statement <strong>in</strong> den Zeilen 29–30 enthält e<strong>in</strong>e<br />

Neuigkeit:<br />

• In Zeile 30 wird der typeid-Operator aufgerufen. Dieser Operator ist derjenige,<br />

der <strong>in</strong> unserer zusammenfassenden Operatoren-Tabelle als<br />

typeid(type) unter dem Begriff Type Identification verewigt wurde.<br />

• Dieser typeid-Operator liefert uns <strong>in</strong>terne, Compiler-implementationsspezifische<br />

bzw., je nach Typ und System, auch OS-implementationsspezifische<br />

Information zu e<strong>in</strong>em Datentyp. Diese Information wird als<br />

Objekt vom Typ type_<strong>in</strong>fo geliefert – hier s<strong>in</strong>d wir plötzlich beim OO-<br />

Teil angelangt.<br />

• Um nun nicht OO-Features von C ++ besprechen zu müssen, stelle ich e<strong>in</strong>fach<br />

<strong>in</strong> den Raum, dass man mit e<strong>in</strong>em Objekt zum Teil ähnlich umgeht,<br />

wie man es mit e<strong>in</strong>er Structure tut: E<strong>in</strong> Objekt besitzt ebenfalls Members<br />

und gleich wie bei e<strong>in</strong>er Structure wird auf diese mittels des Punkt-<br />

Operators zugegriffen. Members können bei e<strong>in</strong>em Objekt nicht nur Variablen,<br />

sondern auch sogenannte Methoden (im Pr<strong>in</strong>zip Funktionen) se<strong>in</strong>.<br />

Und genau um e<strong>in</strong>e solche Methode handelt es sich bei name(), wie sie <strong>in</strong><br />

Zeile 30 aufgerufen wird.<br />

• Die Methode name() liefert bei Aufruf e<strong>in</strong>en Str<strong>in</strong>g, der den <strong>in</strong>ternen,<br />

Compiler- und plattformabhängigen Namen e<strong>in</strong>es Typs repräsentiert. Dieser<br />

muss aus Implementationsgründen nämlich nicht derselbe se<strong>in</strong>, wie der<br />

Typname, den wir im Programm verwenden, wie man auch am Output<br />

sieht. Es verwendet z.B. das mit g++ compilierte Programm unter L<strong>in</strong>ux<br />

für e<strong>in</strong>en char <strong>in</strong>tern e<strong>in</strong>fach den Namen c.<br />

Natürlich kann man typeid nicht nur e<strong>in</strong>fach auf Typen anwenden, denn<br />

dies alle<strong>in</strong> wäre ziemlich s<strong>in</strong>nlos. Man kann typeid auch auf beliebige Expressions,<br />

also z.B. auf Variablen anwenden, wie man z.B. im Statement <strong>in</strong><br />

den Zeilen 64–65 sieht. Und genau dabei handelt es sich, wie auch <strong>in</strong> unserer<br />

Operatorentabelle zu sehen ist, um das so wichtige RTTI -Feature von<br />

C ++: Mittels RTTI ist es <strong>in</strong> C ++ möglich, zur Laufzeit den Typ, zu dem e<strong>in</strong>e<br />

Expression evaluiert, abzufragen.<br />

Und damit sieht man auch, warum es notwendig ist, typeid auf e<strong>in</strong>en Typ<br />

wie <strong>in</strong>t anwenden zu können: Nachdem ja <strong>in</strong>tern die Typen nicht mehr die<br />

uns bekannten Namen haben, sondern plattformabhängige Identifications,<br />

wäre es ansonsten unmöglich herauszuf<strong>in</strong>den, ob etwas z.B. jetzt wirklich<br />

vom Typ <strong>in</strong>t ist. Bestimmte Cast-Operatoren, die wir gleich <strong>in</strong> der Folge<br />

kennen lernen werden, verwenden die gelieferte Typ<strong>in</strong>formation (zu der <strong>in</strong>tern<br />

um e<strong>in</strong>iges mehr als nur der Name gehört, der hier abgefragt wird), um<br />

die Kompatibilität von Datentypen festzustellen, bevor sie ihre Umwandlung<br />

durchführen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!