Ein Pointer auf eine selbsterstellte Klasse wird völlig analog zum bisher
gelernten deklariert. Auch die new
-Zuweisung funktioniert gleich.
A a(3);
A* pa = &a;
A* pb, *pc;
a.x = 4;
pa->x = 4; // Auwahloperator für Pointer auf Klassen
A* pb;
pb = new A; // normale new-Anweisung
pb->x = 4;
pc = new A[10] // Array aus 10 A-Objekten
Wie man im Beispiel sieht wird die new
-Anweisung ganz natürlich benutzt.
Der Zugriff auf Elemente der Pointervariablen geschieht statt mit dem
Auswahloperator .
mit dem Auswahloperator ->
. Dieser liefert
das entprechende Element als LValue zurück (Es kann also ein Wert zugewiesen
werden). Auch die Erstellung eines Arrays der selbsterstellten Klasse ist kein
Problem. Der new
-Aufruf stellt selber die Größe des betreffenden
Objekts fest.
Soll beim new
-Aufruf das Objekt gleich mit bestimmten Werten
initialisiert werden, so kann das auch im new
-Aufruf passieren. Das
geht aber nicht, wenn ein Array des Objektes erzeugt werden soll. Genau
genommen kann ein Array eines Objektes nur dann erzeugt werden, wenn ein
Default-Konstruktor vorhanden ist. Dieser wird immer aufgerufen, wenn keine
Parameter im new
-Aufruf vorhanden sind.
A* a = new A; // Default-Konstruktor wird aufgerufen
A* b = new A[10]; // 10fach Array. 10 mal Default-Konstruktor aufrufen
A* c = new A(4); // Der Kostruktor A(int) wird benutzt
// aber
A* d = new A(?)[10](?) // Keine Analogie für Arrays vorhanden