C++ Tutorial

 Statische Member

Statische Eigenschaften

Statische Eigenschaften sind Eigenschaften, die für alle Objekte einer Klasse nur einmal vorhanden sind.

Eine statische Eigenschaft wird innerhalb der Klasse durch voranstellen der Schlüsselwörter inline static vor dem Datentyp der Eigenschaft definiert.

class Object
{
   ...
public:
   // Statische public-Eigenschaft
   inline static int counter = 0;
};

Der Zugriff aus Memberfunktionen heraus auf die statische Eigenschaft erfolgt wie gewohnt.

Ist die statische Eigenschaft public, kann auch außerhalb von Memberfunktionen darauf zugegriffen werden. Dazu ist entweder vor dem Eigenschaftsnamen der Klassenname anzugeben oder ein beliebiges Objekt der Klasse.

#include <iostream>
#include <format>

class Object
{
public:
   // ctor
   Object()
   {
      counter++;   // Statische Eigenschaft inkrementieren
   }
   // Statische public-Eigenschaft
   inline static int counter = 0;
};

int main()
{
   // Zwei Objekte definieren
   Object obj1;
   Object obj2;
   // Direkter Zugriff auf statische Eigenschaft
   std::cout << std::format("Es wurden {} Objekte definiert.\n",Object::counter);
   // Noch ein Objekt definieren
   Object obj3;
   // Zugriff auf statische Eigenschaft ueber
   // ein beliebiges Objekt
   std::cout << std::format("Es wurden {} Objekte definiert.\n",obj2.counter);
}

Statische Memberfunktionen

Und genauso wie es statische Eigenschaften gibt, gibt es auch statische Memberfunktionen. Auch auf sie kann, im Gegensatz zu 'normalen' Memberfunktionen, ohne die Definition eines Objekts durch Angabe des Klassennamens zugegriffen werden. Statische Memberfunktionen haben nur Zugriff auf statische Eigenschaften und statische Memberfunktionen.

Eine Memberfunktion wird zu einer statischen Memberfunktion, indem vor dem Returntyp der Memberfunktion das Schlüsselwort static gestellt wird. Wird die statische Memberfunktion außerhalb der Klasse definiert, darf bei der Definition das Schlüsselwort static nicht mehr mit angegeben werden.

class Object
{

   ...
public:
   static int GetInt();  // Statische Memberfunktion
};

#include <iostream>
#include <format>

class Object
{
   int number;                    // Objektnummer
   inline static int counter = 0; // Zaehler als statische Eigenschaft
public:
   // ctor
   Object()
   {
      // Objektnummer ablegen und Anzahl der
      // erstellten Objekte erhoehen
      number = ++counter;
   }
   // Liefert Objektnummer zurueck
   int GetNumber()
   {
      return number;
   }
   // Statische Memberfunktion, liefert Anzahl
   // der erstellten Objekte zurueck
   static int GetCounter()
   {
      return counter;
   }
};

int main()
{
   // Direkter Zugriff auf statische Memberfunktion
   std::cout << std::format("Es wurden {} Objekte definiert.\n",Object::GetCounter());
   // Zwei Objekte definieren
   Object obj1;
   Object obj2;
   // Direkter Zugriff auf statische Memberfunktion
   std::cout << std::format("Es wurden {} Objekte definiert.\n",Object::GetCounter());
   // Noch ein Objekt definieren
   Object obj3;
   // Zugriff auf statische Memberfunktion ueber
   // ein beliebiges Objekt
   std::cout << std::format("Es wurden {} Objekte definiert.\n",obj2.GetCounter());
   // Objektnummer von obj2 ausgeben
   std::cout << std::format("obj2 ist Objekt Nummer {}\n",obj2.GetNumber());
}