Die Elemente eines Objektes haben eine Eigenschaft, die nicht immer wünschenswert sein muß: sie sind objektspezifisch, d.h. sie gelten für jedes Objekt einer Klasse einzeln und nie für alle zusammen. Es kann aber sinnvoll sein, klassenspezifische Elemente zu haben, so z.B. für einen gemeinsamen Zähler wie eine Kunden- oder Seriennummer. Solche Werte lassen sich nur schwer in allen Objekten gleichzeitig verwalten und man würde viel mehr Speicher benötigen, wenn jedes Objekt einen solchen Wert speichern müßte.
In C++ können Elemente ebenso wie Methoden daher als
klassenspezifisch deklariert werden. Sie werden dann als statisch
bezeichnet, da sie sich ja genauso wie statische Variablen
verhalten sollen, nur daß sie hier nicht mehr
statisch bzgl. mehrerer Aufrufe einer Funktion sind, sondern daß
sie statisch bzgl. mehrerer Instanzierungen einer Klasse sind.
Aufgrund dieser Ähnlichkeit wird auch das gleiche Schlüsselwort
genutzt:
static
. Statische Funktionen dürfen dabei
keine nicht-statischen Elemente verändern.
Die Definition und Initialisierung eines statischen Elementes
erfolgt dabei ausserhalb der Klasse mit Hilfe des Scopeoperators ::
.
Im Beispiel auf der folgenden Seite sähe eine Initialisierung
dann so aus:
int gast::zaehler=0;
Statische Elemente und Methoden lassen neben den normalen objektbezogenen Aufrufen (Objekt.Methode) auch klassenbezogene Aufrufe zu (Klasse::Methode). So kann der Zähler der Beispielklasse auch über
gast::zeigeAnzahl();
aufgerufen werden, egal ob Instanzen existieren oder nicht.