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.

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

52 {<br />

53 v i s i b l e s i d e = BACK SIDE;<br />

54 }<br />

55<br />

56 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

57 /∗ returns the v i s i b l e (=up ) s i d e o f the card<br />

58 ∗/<br />

59<br />

60 unsigned GameCard : : g e t V i s i b l e S i d e ( )<br />

61 {<br />

62 return ( v i s i b l e s i d e ) ;<br />

63 }<br />

64<br />

65 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

66 /∗<br />

67 ∗ @return the d i s p l a y r e p r e s e n t a t i o n o f the card<br />

68 ∗/<br />

69<br />

70 const char ∗GameCard : : getDisplayRep ( )<br />

71 {<br />

72 // very bad p r a c t i c e , but the way to handle t h i s c o r r e c t l y<br />

73 // i s not known yet !<br />

74 return ( 0 ) ;<br />

75 }<br />

In den Zeilen 6 und 7 sieht man, dass die static const Members der Klasse<br />

sehr wohl def<strong>in</strong>iert werden müssen, um den L<strong>in</strong>ker zu beruhigen, dass aber<br />

hierbei ke<strong>in</strong>e explizite Initialisierung auf bestimmte Werte mehr stattf<strong>in</strong>det.<br />

Die Initialwerte s<strong>in</strong>d ja bereits im Header vorgegeben. Würde man sie hier<br />

nochmals explizit h<strong>in</strong>schreiben, dann würde sich der Compiler mittels Fehlermeldung<br />

beschweren, dass man ihn doch bitte <strong>in</strong> Ruhe lassen soll, denn er<br />

weiß ja sowieso schon, welche Werte die Konstanten zu bekommen haben.<br />

Die Implementation der Methode getDisplayRep <strong>in</strong> den Zeilen 70–75<br />

retourniert e<strong>in</strong>en 0-Po<strong>in</strong>ter, denn die Basisklasse besitzt ke<strong>in</strong>e Darstellung<br />

und wüsste dementsprechend auch nicht, was sie darstellen sollte. Diese Art<br />

der Implementation ist absolut nicht für die Praxis geeignet und im Pr<strong>in</strong>zip<br />

e<strong>in</strong> böser Hack, jedoch ist bisher der Mechanismus noch nicht bekannt, durch<br />

den dies vermieden werden kann.<br />

Bisher haben wir nicht viel Neues kennen gelernt, vor allem noch immer<br />

nicht, wie man eigentlich e<strong>in</strong>e Ableitung von e<strong>in</strong>er Klasse <strong>in</strong> C ++ realisiert.<br />

Das ändert sich jetzt mit der speziellen Klasse von Karten für das Memory<br />

Spiel, die von der Basis GameCard abgeleitet ist. Deren Deklaration sieht<br />

folgendermaßen aus (memory_game_card_v3.h):<br />

1 // memory game card v3 . h − derived implementation o f MemoryGameCard<br />

2<br />

3 #ifndef memory game card v3 h<br />

4 #def<strong>in</strong>e memory game card v3 h<br />

5<br />

6 #<strong>in</strong>clude ”game card . h”<br />

7<br />

8 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

9 /∗<br />

10 ∗ MemoryGameCard<br />

11 ∗<br />

12 ∗ model of a card as used <strong>in</strong> the game ”memory”

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!