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.

9.2 E<strong>in</strong>fache Klassen 179<br />

1. Es wird Speicher für die Variable reserviert. Die Größe des Speichers<br />

ist bestimmt durch den Typ der Variable und durch gewisse andere system<strong>in</strong>terne<br />

Gegebenheiten. In jedem Fall wird garantiert, dass genug<br />

reserviert wird, um die Daten dem verwendeten Typ gemäß zu halten.<br />

2. Nach der Reservierung des Speichers folgt die Initialisierung der Variable.<br />

3. Mit der fertig <strong>in</strong>itialisierten Variable kann man ab jetzt arbeiten, wie es<br />

durch ihren Typ vorgegeben ist.<br />

4. Wenn e<strong>in</strong>e Variable ihre Lifetime beendet hat, wird sie “weggeräumt”.<br />

Der erste Schritt beim “Wegräumen” ist, dass eventuell notwendige explizite<br />

“Aufräumarbeiten” durchgeführt werden.<br />

5. Wenn alle notwendigen “Aufräumarbeiten” beendet s<strong>in</strong>d, wird der Speicher,<br />

der von der Variable belegt war, wieder freigegeben.<br />

Genau die Punkte 2 und 4 s<strong>in</strong>d es, die beim Arbeiten mit Klassen und<br />

Objekten für uns hier <strong>in</strong>teressant s<strong>in</strong>d. Es wird nämlich bei Punkt 2 vom<br />

Compiler der Aufruf des entsprechenden Konstruktors e<strong>in</strong>gesetzt, der der<br />

gewünschten Initialisierung entspricht. Bei Punkt 4 wird der Aufruf des<br />

Destruktors e<strong>in</strong>gesetzt. Haben wir es also mit e<strong>in</strong>fachen (=nicht abgeleiteten)<br />

Klassen zu tun, so sieht der Lifecycle e<strong>in</strong>es Objekts dieser Klasse genau<br />

folgendermaßen aus:<br />

1. Speicher reservieren.<br />

2. Entsprechenden Konstruktor aufrufen.<br />

3. Objekt lebt und mit ihm kann gearbeitet werden.<br />

4. Zu Ende der Lifetime Destruktor aufrufen.<br />

5. Speicher freigeben.<br />

Das Pr<strong>in</strong>zip des Overload<strong>in</strong>gs gilt natürlich nicht nur für Funktionen <strong>in</strong> C ++,<br />

sondern auch für Methoden. Da der Konstruktor e<strong>in</strong>e solche darstellt, ist<br />

selbstverständlich auch hier e<strong>in</strong> Overload<strong>in</strong>g möglich. Man kann also verschiedene<br />

Konstruktoren mit verschiedenen Parametersätzen zur Verfügung<br />

stellen, die entsprechend s<strong>in</strong>nvollen Initialisierungsbedürfnissen entsprechen.<br />

E<strong>in</strong>e gewisse Sonderstellung nimmt hierbei der sogenannte default Konstruktor<br />

e<strong>in</strong>, also der Konstruktor, der ke<strong>in</strong>en Parameter entgegennimmt. Im<br />

weiter unten folgenden Beispiel werden wir diesen noch kurz genauer kennen<br />

lernen.<br />

Vorgreifend möchte ich auch noch erwähnen, dass e<strong>in</strong>e ähnliche Sonderstellung<br />

vom sogenannten Copy Konstruktor e<strong>in</strong>genommen wird. Dieser wird<br />

gesondert <strong>in</strong> Abschnitt 9.2.2 behandelt um hier nicht für Verwirrung zu sorgen.<br />

Im Gegensatz zum Konstruktor ist e<strong>in</strong> Overload<strong>in</strong>g des Destruktors nicht<br />

möglich. Es kann ausschließlich immer nur genau e<strong>in</strong>en Destruktor geben,<br />

nämlich den, der ke<strong>in</strong>e Parameter entgegennimmt. Warum das so ist, ist<br />

auch leicht e<strong>in</strong>zusehen: Der Aufruf des Destruktors wird vom Compiler am<br />

Ende der Lifetime e<strong>in</strong>es Objekts e<strong>in</strong>gesetzt. Bei e<strong>in</strong>er auto-Variable also<br />

beim Verlassen des Blocks, <strong>in</strong> dem sie def<strong>in</strong>iert wurde. Wie soll nun der

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!