Verwendung statischer Variablen
- Das nun folgende Beispiel ist kurz, aber etwas kompliziert.
- Wir wollen es analysieren, indem wir zuerst den Konstruktor betrachten und dann die Variable nr.
- Doch lassen wir es zunächst einfach auf uns wirken:
|
Bild 0-1: C++ Programm mit Konstruktor und statischer Variable nr.
Bild 0-2: Konsolen-Ausgabe nach Aufruf.
Beispiel konstruktor2.cpp gezipt
Der leere Konstruktor
- Der Konstruktor-Methode in obigem Beispiel werden keine Parameter übergeben.
- Ein solcher Konstruktor heißt leerer Konstruktor
- In C++ entfallen beim Aufruf des leeren Konstruktors die runden Klammern.
- Dass der Konstruktor tatsächlich beim Erzeugen der Objekte mit
Zylinder kleinerZylinder, grosserZylinder; aufgerufen wird, sehen wir an der Konsolenausgabe:
- Das Programm verlangt erst die Eingabe der Attribute für das erste Objekt und dann die für das zweite, genauso, wie es in dem Konstruktor codiert ist.
|
Die statische Variable nr
- Bisher hatten wir nur Objekt-Attribute und Objekt-Methoden kennengelernt.
- Beispiele waren Radius und Höhe eines Zylinders, Abmessungen eines Quaders, eine Methode zur Volumenberechnung und Rückgabe etc.
- All diesen Attributen und Methoden ist gemeinsam, dass jeweils etwas anderes zurückgeben, oder beinhalten, je nachdem für welches Objekt sie mit dem Punkt-Operator aufgerufen werden.
- Das Volumen für Zylinder kleinerZylinder ist ein anderes, als das für grosserZylinder.
- Demgemäß liefert kleinerZylinder.berechneVolumen() auch eine andere Zahl, als grosserZylinder.berechneVolumen().
- Was aber macht man, wenn man eine Variable, oder eine Methode haben möchte, die für alle Instanzen (Objekte) der Klasse gleich sein soll?
- In diesem Fall erzeugt man sich eine statische Methode / ein statisches Attribut.
|
- Mit dem Attribut nr soll gespeichert werden, wieviele Objekte bisher erzeugt wurden.
- Das heißt sie soll unabhängig von den erzeugten Objekte nur einmal existieren und sie soll der Klasse, nicht dessen Objekten zugehören.
- Weil das so ist, kann sie nach jedem Konstruktor-Aufruf um eins erhöht werden und behält ihren Wert.
- Die Syntax, um die in der Klasse deklarierte statische Variable zu initialisieren, ist in C++ etwas umständlich und erfolgt mit der Zeile
int Zylinder::nr=0; außerhalb der Klasse.
- Nichtsdestotrotz ist die Variable nr keine globale Variable.
- Der doppelte Doppelpunkt mit dem vorangestellten Klassennamen zeigt die Zugehörigkeit an.
- Man könnte sie von der main-Methode aus dann verändern, wenn man sie in den public-Bereich der Klasse stellen würde.
|
UML-Klassendiagramm mit statischer Variable und leerem Konstruktor
Bild 0-2: UML-KLassendiagramm der Klasse Zylinder mit leerem Konstruktor und statischer Variable nr.