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.

40 2. Datentypen und Variablen<br />

Ganz wichtige Aussagen über die Members e<strong>in</strong>er struct b<strong>in</strong> ich noch<br />

schuldig geblieben, die <strong>in</strong> Kürze <strong>in</strong> Verb<strong>in</strong>dung mit Unions und später ganz<br />

besonders <strong>in</strong> Verb<strong>in</strong>dung mit Po<strong>in</strong>tern an Bedeutung gew<strong>in</strong>nen:<br />

• Die e<strong>in</strong>zelnen Members e<strong>in</strong>er struct s<strong>in</strong>d garantiert genau <strong>in</strong> der Reihenfolge<br />

im Speicher angeordnet, <strong>in</strong> der sie <strong>in</strong> der Deklaration der struct<br />

angeführt werden.<br />

• Es wird allerd<strong>in</strong>gs nicht garantiert, dass die e<strong>in</strong>zelnen Members unmittelbar<br />

h<strong>in</strong>tere<strong>in</strong>ander im Speicher zu liegen kommen! Je nach Compiler<br />

und Zielplattform kann es passieren, dass zwischen den e<strong>in</strong>zelnen Members<br />

“Löcher” im Speicher frei bleiben.<br />

• Es wird garantiert, dass die Startadresse des ersten Members im Speicher<br />

mit der Startadresse der gesamten struct übere<strong>in</strong>stimmt.<br />

2.4.3 Unions<br />

Es gibt Fälle, <strong>in</strong> denen man damit umgehen können muss, dass Variablen<br />

e<strong>in</strong>en kontextabhängigen Typ besitzen. Als Motivation für die Existenz e<strong>in</strong>es<br />

solchen Konstrukts möchte ich hier das Event-Handl<strong>in</strong>g bei graphischen<br />

Benutzeroberflächen anführen:<br />

• Die Benutzeroberflächen der verschiedenen gängigen Betriebssysteme (MS-<br />

W<strong>in</strong>dows, Unix, MacOS, etc.) folgen alle demselben Pr<strong>in</strong>zip: Egal, was<br />

passiert, ob nun e<strong>in</strong>e Taste am Keyboard gedrückt wird, die Maus bewegt<br />

wird oder sonstige Ereignisse auftreten, die Programme bekommen e<strong>in</strong>e<br />

Mitteilung über das Auftreten e<strong>in</strong>es solchen Ereignisses als sogenannten<br />

Event bzw. als Message mitgeteilt.<br />

• Alle Events werden ungeachtet des Typs <strong>in</strong> dieselbe Queue für das jeweilige<br />

Programm gestellt, das von ihnen betroffen ist. Das Programm hat die<br />

Aufgabe, diese Events Stück für Stück aus der Queue zu lesen und darauf<br />

zu reagieren.<br />

Nun kann man sich leicht vorstellen, dass z.B. e<strong>in</strong> Keyboard-Event ganz andere<br />

Informationen enthält als e<strong>in</strong> Mouse-Event. Bei e<strong>in</strong>em Keyboard-Event ist<br />

es <strong>in</strong>teressant, welche Taste gedrückt wurde, welche Modifiers (=Shift, Ctrl,<br />

etc.) gerade gedrückt waren, als die Taste gedrückt wurde und vielleicht<br />

auch noch, wann diese Taste gedrückt wurde. Bei e<strong>in</strong>em Mouse-Event h<strong>in</strong>gegen<br />

ist es <strong>in</strong>teressant, wo der Mauszeiger gerade steht, ob e<strong>in</strong>e oder mehrere<br />

Maustasten gedrückt wurden, etc.<br />

Es gibt nun, je nach System, e<strong>in</strong>e Unmenge verschiedener Event-Typen<br />

mit der daraus folgenden Unmenge an verschiedener Information, die für die<br />

e<strong>in</strong>zelnen Typen relevant ist. E<strong>in</strong>e besonders brutale Methode, wie man nun<br />

alle möglichen Informationsteile aller möglichen verschiedenen Events unter<br />

e<strong>in</strong>en Hut bekommt, ist die Def<strong>in</strong>ition e<strong>in</strong>er struct, die für alle verschiedenen<br />

Fälle alle verschiedenen Members enthält. Je nach Typ des Events<br />

ist dann nur e<strong>in</strong> ger<strong>in</strong>ger Bruchteil davon <strong>in</strong>teressant und der Rest enthält

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!