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.

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

ist sie nicht notwendig, da der Compiler bei Fehlen derselben implizit e<strong>in</strong>e<br />

Initialisierung auf 0 e<strong>in</strong>setzt, wie bereits aus Abschnitt 2.2 bekannt ist.<br />

Um nun tatsächlich die Anzahl der vorhandenen Instanzen zu zählen, werden<br />

Konstruktor und Destruktor entsprechend modifiziert. Wir wissen bereits,<br />

dass bei Erstellen e<strong>in</strong>er neuen Instanz gesichert der Konstruktor aufgerufen<br />

wird. Also kommt ihm die Aufgabe zu, den Wert von num_<strong>in</strong>stances_<br />

zu <strong>in</strong>krementieren, wie man <strong>in</strong> der Folge <strong>in</strong> Zeile 17 sieht:<br />

15 MemoryGameCard : : MemoryGameCard( const char ∗ symbol )<br />

16 {<br />

17 num <strong>in</strong>stances ++;<br />

18 i f ( ! symbol )<br />

19 {<br />

20 symbol = 0;<br />

21 return ;<br />

22 }<br />

23 symbol = new char [ s t r l e n ( symbol ) + 1 ] ;<br />

24 strcpy ( symbol , symbol ) ;<br />

25 }<br />

Wir wissen auch, dass beim Zerstören e<strong>in</strong>es Objekts der Destruktor gesichert<br />

aufgerufen wird. Dementsprechend kommt ihm nun die Aufgabe zu, den<br />

Instanzenzähler zu dekrementieren, wie man <strong>in</strong> der Folge <strong>in</strong> Zeile 35 sieht:<br />

31 MemoryGameCard : : ˜ MemoryGameCard( )<br />

32 {<br />

33 i f ( symbol )<br />

34 delete [ ] symbol ;<br />

35 num <strong>in</strong>stances −−;<br />

36 }<br />

Wie bereits besprochen, wollen wir auch auf die Anzahl der Instanzen zugreifen<br />

können, ohne dass wir direkt e<strong>in</strong> Objekt vom Typ MemoryGameCard<br />

<strong>in</strong> der Hand haben. Dazu haben wir e<strong>in</strong>e static Methode deklariert. Die<br />

Def<strong>in</strong>ition derselben im .cpp File sieht dann aus wie folgt:<br />

73 unsigned MemoryGameCard : : getNumInstances ( )<br />

74 {<br />

75 return ( num <strong>in</strong>stances ) ;<br />

76 }<br />

Man kann leicht erkennen, dass für static Methoden dasselbe gilt, wie für<br />

static Variablen: Das Keyword static wird bei der Def<strong>in</strong>ition nicht mehr<br />

geschrieben.<br />

Wie man unsere modifizierte Klasse verwenden kann, zeigt das folgende<br />

Demoprogramm (memory_game_card_v2_test.cpp):<br />

1 // memory game card v2 test . cpp − t e s t program f o r MemoryGameCard<br />

2<br />

3 #<strong>in</strong>clude

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!