C++-Programmierung: Statische Elemente in Klassen

Aus Wikibooks
Zur Navigation springen Zur Suche springen
Symbol opinion vote.svg
Alte Seite
Diese Seite gehört zum alten Teil des Buches und wird nicht mehr gewartet. Die Inhalte sollen in das neue Buch einfließen: C++-Programmierung/ Inhaltsverzeichnis.
Eine aktuelle Seite zum gleichen Thema ist unter C++-Programmierung/ Im Zusammenhang mit Klassen verfügbar.

Statische Elemente sind Variablen, Konstanten oder Funktionen, die pro Klasse nur einmal existieren und nicht, wie ihre Member-Pendants, einmal pro Instanz.

So werden z.B. häufig statische Funktionen verwendet, um Instanzen ihrer Klasse zu erstellen (Stichwort Factory-Klasse) oder statische Variablen, um die Anzahl der Instanzen ihrer Klassen zu zählen.

Statische Elemente werden innerhalb der Klassendeklaration mit dem Schlüsselwort static gekennzeichnet.

class Klasse
{
  static int statischeVariable;
  static void statischeFunktion();
  //...
};

Da statische Variablen in der Klassendeklaration nur deklariert, aber nicht definiert werden können, erfolgt die Definition in der .cpp-Datei bei der restlichen Implementierung. Hier können Sie die Variablen auch gleich initialisieren:

int Klasse::statischeVariable = 5;

Da statische Elemente unabhängig von Instanzen ihrer Klasse sind, existieren sie während der gesamtem Programmlaufzeit. Sie verhalten sich also wie globale Variablen, sind aber (sofern private) nur innerhalb der Klasse sichtbar.

Es gibt zwei Möglichkeiten, um von außen auf statische Elemente zuzugreifen:

  • Falls ein Objekt der Klasse existiert, auf das zugegriffen werden kann, einfach über objekt.statischeVariable bzw. objekt.statischeFunktion() oder
  • falls kein Objekt besteht, über Klasse::statischeVariable bzw. Klasse::statischeFunktion()

Die zweite Variante ist zu bevorzugen, weil sie deutlich macht, dass es sich bei der Variable bzw. Funktion um eine statische handelt.


Wikibooks buchseite.svg Zurück zu Polymorphie | One wikibook.svg Hoch zu Inhaltsverzeichnis | Wikibooks buchseite.svg Vor zu Template-Klassen