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.

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

Objekt, das zuletzt angelegt wurde, als Erstes zerstört wird. Dies ist auch das<br />

normale Verhalten, das praktisch alle Compiler zeigen werden, denn die auto-<br />

Variablen liegen ja auf dem Stack und werden entsprechend beim Abbauen<br />

desselben zerstört.<br />

Noch e<strong>in</strong> kle<strong>in</strong>er Exkurs: Aus Gründen der Übersichtlichkeit habe ich<br />

hier die Deklaration der Klasse zusammen mit der Def<strong>in</strong>ition der Methoden<br />

geme<strong>in</strong>sam <strong>in</strong> e<strong>in</strong> Source File gesteckt. Dies ist im Entwickleralltag natürlich<br />

ke<strong>in</strong>esfalls nachzuahmen. Dort ist e<strong>in</strong>e saubere Aufteilung <strong>in</strong> .h (für die Klassendeklaration)<br />

und .cpp Files (für die Def<strong>in</strong>ition der Methoden) <strong>in</strong> jedem<br />

Fall vorzunehmen.<br />

Nach diesen beiden kle<strong>in</strong>en Exkursen zurück zum Thema: In den Zeilen<br />

22–24 des Programms f<strong>in</strong>det man die Deklarationen der verschiedenen<br />

möglichen Konstruktoren für die Klasse SimpleConstrDestrDemo. Man kann<br />

also Objekte auf e<strong>in</strong>e der dadurch festgelegten Arten anlegen:<br />

• Ohne Parameter, wobei der default Konstruktor aus Zeile 22 aufgerufen<br />

wird.<br />

• Mit e<strong>in</strong>em <strong>in</strong>t Parameter, wobei der Konstruktor aus Zeile 23 aufgerufen<br />

wird.<br />

• Mit e<strong>in</strong>em char * als Parameter, wobei der Konstruktor aus Zeile 24 aufgerufen<br />

wird.<br />

Die Konstruktoren werden gemäß den Regeln des Overload<strong>in</strong>gs, die wir bereits<br />

<strong>in</strong> Kapitel 5 kennen gelernt haben, vom Compiler ausgewählt. Sollte<br />

sich ke<strong>in</strong>e s<strong>in</strong>nvolle Übere<strong>in</strong>stimmung ergeben, dann führt dies natürlich zu<br />

e<strong>in</strong>em Fehler.<br />

Es ist aufgrund des zuvor skizzierten Lifecycles von Objekten garantiert,<br />

dass e<strong>in</strong> Konstruktor erst aufgerufen wird, wenn auf jeden Fall schon der<br />

Speicher für das Objekt reserviert wurde. Man hat es also <strong>in</strong>nerhalb des<br />

Konstruktors mit e<strong>in</strong>em angelegten, aber nicht <strong>in</strong>itialisierten Objekt zu tun.<br />

Es wurde bereits erwähnt, dass der default Konstruktor e<strong>in</strong>e gewisse Sonderstellung<br />

e<strong>in</strong>nimmt. In Zeile 78 sieht man auch, was es damit auf sich hat:<br />

Man legt e<strong>in</strong>fach e<strong>in</strong>e Variable der gewünschten Klasse an, ohne irgendwelche<br />

runden Klammern dah<strong>in</strong>ter zu schreiben. Im Gegensatz dazu gibt man<br />

bei Initialisierungen mittels anderer Konstruktoren die Initialisierungsparameter<br />

<strong>in</strong> runden Klammern h<strong>in</strong>ter dem Variablennamen an, wie man <strong>in</strong> den<br />

Zeilen 79 und 80 sieht.<br />

Vorsicht Falle: Die Sonderbehandlung des default Konstruktors, der ohne<br />

runde Klammern geschrieben wird, stellt e<strong>in</strong>e kle<strong>in</strong>e Inkonsistenz bezüglich<br />

der Intuitivität und der E<strong>in</strong>heitlichkeit von Code dar. Aus diesem Grund<br />

passiert es C ++ Neul<strong>in</strong>gen nur allzu leicht, dass sie Statements wie z.B. das<br />

folgende schreiben:<br />

SimpleConstrDestrDemo testvar1();

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!