kramann.info
© Guido Kramann

Login: Passwort:










2.4 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:
C++ Programm mit Konstruktor und statischer Variable nr

Bild 2.4-1: C++ Programm mit Konstruktor und statischer Variable nr.

Konsolenausgabe

Bild 2.4-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

UML-Klassendiagramm

Bild 2.4-2: UML-KLassendiagramm der Klasse Zylinder mit leerem Konstruktor und statischer Variable nr.