„Hallo Amigo! Jetzt möchte ich dir erzählen, wie Objekte erstellt werden.“
„Was ist daran so kompliziert, Onkel Ritschie? Man schreibt einfach new gefolgt vom Klassennamen, gibt den richtigen Konstruktor an und fertig!“
„Das stimmt. Aber was passiert innerhalb des Objekts, wenn du das tust?“
„Was passiert?“
„Das hier passiert: Das Objekt wird in mehreren Schritten erstellt.“
1) Zunächst wird Speicher für alle Member-Variablen der Klasse zugewiesen.
2) Dann wird die Basisklasse initialisiert.
3) Dann werden allen Variablen Werte zugewiesen, falls diese angegeben sind.
4) Schließlich wird der Konstruktor aufgerufen.
„Das sieht nicht sehr kompliziert aus: erst die Variablen, dann der Konstruktor.“
„Sehen wir uns mal an einem Beispiel mit zwei Klassen an, wie das funktioniert:“
Code | Beschreibung |
---|---|
|
Deklariere zwei Klassen: Pet(pet) und Cat(cat).
In der Cat-Klasse sehen wir einen expliziten Aufruf des Konstruktors der Basisklasse. Folgendes geschieht nach der Zuweisung des Speichers: Dann beginnt die Initialisierung der Cat-Klasse. |
|
„Das ist ein etwas verwirrend. Warum ist das so kompliziert?“
„Es ist eigentlich nicht so schwierig, wenn man weiß, was wirklich passiert:“
Wenn eine Klasse keine Konstruktoren besitzt, wird automatisch einer erzeugt.
Standardkonstruktor | |
---|---|
|
|
Wenn du den Basisklassenkonstruktor nicht aufrufst, wird er automatisch aufgerufen.
Aufruf des Konstruktors der Basisklasse | |
---|---|
|
|
|
|
Member-Variablen werden im Konstruktor initialisiert.
Initialisierung von Member-Variablen | |
---|---|
|
|
Das passiert tatsächlich | |
---|---|
|
|
„Jetzt verstehe ich es besser: zuerst die Basisklasse, dann Variablen außerhalb des Konstruktors, dann der Konstruktorcode.“
„Sehr gut, Amigo! Das war‘s!“
GO TO FULL VERSION