FSST - Hardwarenahe Programmierung

Klassenvariablen

Inhalt

Statische Klassenvariablen entsprechen im Prinzip globalen Variablen unter Anwendung der Kapselung von Klassen. Sie existieren unabhängig davon, wie oft eine Klasse instanziiert wird, immer genau einmal. Sie beinhalten damit Daten, die allen Objekten einer Klasse gemeinsamen sind. Auf öffentliche statische Daten einer Klasse kann jederzeit zugegriffen werden, unabhängig davon, ob schon Instanzen der Klasse vorhanden sind oder nicht. Damit auf statische Variable zugegriffen werden kann müssen diese public sein. Besser für den Zugriff auf statische Variable ist es eine Methode für den Zugriff zu implementiert. Diese kann ebenfalls statisch sein (statische Methode).
Z.B. könnte die Anzahl der erzeugten Objekte gezählt werden.

class Date : public RTC8563
{
private:
    uint8_t bcdToUint(uint8_t const nybbles);
    static int anzahl;  // Klassenvariable
public:
    Date()
    {
        anzahl++;   // Klassenvariable erhöhen
    }   
    uint8_t GetDay();
    static int GetAnzahl()  // statische Methode
    {
        return anzahl;
    }
};
int Date:: anzahl = 0;  // Definition der statischen Variablen --> besser in Date.cpp
  • Statische Variable sind Memeber die für alle Objekte einer Klasse nur ein einziges Mal vorhanden sind.
  • Statische Variable werden standardmäßig mit 0 (oder einem anderen Wert) initialisiert
  • Auf statische Variable kann ohne Bezug auf ein bestimmtes Objekt zugegriffen werden, wenn sie public sind.

Um eine statische Variable zu definieren sind zwei Schritte erforderlich:

  1. Zuerst muss innerhalb der Klasse die statische Variable deklariert werden. Bei der Deklaration ist vor dem Datentyp der das Schlüsselwort static anzugeben (Zeile 5).
  2. Da die statische Variable für alle Objekte der Klasse nur einmal vorhanden ist, muss sie explizit außerhalb der Klasse definiert werden (Zeile 17). Die Definition erfolgt genauso wie die Definition einer normalen Variable, jedoch wird vor dem Variablename noch die zugehörige Klasse angegeben. Achtung KEINE Schlüsselwort static.

Statische Methode
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 Methode gestellt (Zeile 12). Wird die Methode außerhalb der Klasse definiert, so darf hier das Schlüsselwort static nicht mehr angegeben werden.

Achtung: statische Methoden haben nur Zugriff auf statische Variable bzw. Member.


Und in main:

int main()
{
    Date rtc;  // instanziieren des Objektes rtc
    pc.printf("Anzahl: %d", Date::GetAnzahl());  // Zugriff auf stat. Methode über Klassenname
    pc.printf("Anzahl: %d", rtc.GetAnzahl());    // Zugriff auf stat. Methode über Objektvariable
}

Der Aufruf einer statischen Methode kann auf drei verschiedene Arten erfolgen:

  1. entweder durch sich selbst (hier nicht aufgeführt, rekursive Methoden!)
  2. ohne Bezug auf ein Objekt, indem beim Aufruf vor dem Namen der Methode der Klassenname mit dem Scope-Operator (::) gestellt wird (Zeile 4)
  3. in Verbindung mit einem beliebigen Objekt und der Objektvariable, wie bei abderen Methodenaufrufen (Zeile 5).


See how it works: Statische Member

Klassen in C++


All wikipages