Statische Eigenschaften sind Eigenschaften, die für alle Objekte einer Klasse nur einmal vorhanden sind. Sie werden standardmäßig mit 0 initialisiert.
Eine Eigenschaft wird als statische Eigenschaft definiert, indem vor dem Datentyp der Eigenschaft inline static angegeben wird.
1: // Klassendefinition
2: class Window
3: {
4: ...
5: inline static short noOfWin{0}; // static Definition
6: };
1: // Klassendefinition
2: class Window
3: {
4: ...
5: static short noOfWin; // static Deklaration
6: };
7: // static Definition
8: short Window::noOfWin = 0;
Der Zugriff auf eine statische Eigenschaft aus einer Methode seiner Klasse heraus erfolgt wie der Zugriff auf eine sonstige Eigenschaft. Ist die statische Eigenschaft public, kann auch von außerhalb der Klasse ohne Bezug auf ein Objekt auf diese Eigenschaft zugegriffen werden. Dabei ist vor den Eigenschaftsnamen der Klassenname anzugeben. Alternativ kann anstelle des Klassennamens auch ein Objekt angegeben werden.
1: // Klassendefinition2: class Window
3: {
4: ...
5: public:
6: Window(); // ctor
7: ~Window(); // dtor
8: inline static short noOfWin; // Statische Eigenschaft
9: };
10: // Zugriff aus Methode heraus
11: Window::Window()
12: {
13: noOfWin++; // Anzahl Fenster inkrementieren
14: }
15: Window::~Window()
16: {
17: noOfWin--; // Anzahl Fenster dekrementieren
18: }
19:
20: // main() Funktion
21: main()
22: {
23: ...
24: // Falls bereits Fenster erstellt wurden
25: if (Window::noOfWin != 0)
26: ...
27: }
Im Beispiel zählt die statische Eigenschaft noOfWin die Anzahl der Window-Objekte. Selbstverständlich sollte in der Praxis dieser Zähler nicht public sein. Dies dient lediglich zur Demonstration des direkten Zugriffs auf eine statische Eigenschaft.
Ein weiterer Anwendungsfall für eine statische Eigenschaft ist die Definition eines Feldes mit einer festen Größe. Soll die Feldgröße über eine Konstante bestimmt werden, ist diese Konstante als statische Eigenschaft zu definieren.
1: class Any
2: {
3: static const unsigned int SIZE{10};
4: int field[SIZE];
5: ...
6: };
Der Grund hierfür ist, dass einer Konstante ansonsten im Konstruktor per Initialisiererliste explizit ein Wert zugewiesen werden kann und damit die Feldgröße von Objekt zu Objekt unterschiedlich wäre.
Statische Methoden werden eingesetzt, um statische Eigenschaften ohne Objektbezug bearbeiten zu können.
Um eine Methode als statische Methode zu definieren, wird bei der Deklaration bzw. Definition innerhalb der Klasse das Schlüsselwort static vor dem Returntyp der Funktion gestellt. Wird die Methode außerhalb der Klasse definiert, darf das Schlüsselwort static nicht mehr angegeben werden.
1: // Klassendefinition
2: class Window
3: {
4: inline static short noOfWin{0}; // Statische Eigenschaft
5: public:
6: static short GetNoOfWin(); // Statische Methode
7: };
8: // Definition der statischen Methode
9: short Window::GetNoOfWin()
10: {
11: return noOfWin;
12: }
Der Aufruf einer statischen Methode kann auf drei verschiedene Arten erfolgen:
Die letzten beiden Fälle sind im nachfolgenden Beispiel dargestellt.
1: // Klassendefinition
2: class Window
3: {
4: inline static short noOfWin{0}; // Statische Eigenschaft
5: public:
6: static short GetNoOfWin() // Statische Methode
7: {
8: return noOfWin;
9: }
10: };
11:
12: // main() Funktion
13: int main()
14: {
15: Window myWin;
16: short winCount;
17: ...
18: winCount = Window::GetNoOfWin(); // Direkter Aufruf
19: winCount = myWin.GetNoOfWin(); // Aufruf über ein Objekt
20: ...
21: }
Statische Methoden besitzen eine Reihe von Einschränkungen:
Copyright 2024 © Wolfgang Schröder
E-Mail mit Fragen oder Kommentaren zu dieser Website an: info@cpp-tutor.de
Impressum & Datenschutz