Static und Instanzen



  • Hey,
    Bin ein ziemlicher Noob was C++ und allgemein die Progammierkunst angeht, jedoch habe ich eine allgemeine Frage:

    Warum kann eine static-Methode nicht auf die Instanzvariablen der Klasse zugreifen?

    Vielen Dank im Voraus,
    VG Exodia



  • Eine static-Methode kann sehr wohl auf Instanzvariablen der Klasse zugreifen. Die Frage ist nur: Welcher Instanz? Darüber solltest du mal 30s lang nachdenken.



  • Wenn du "Noob" bist, dann hilft es deinem Verständnis vielleicht, dass nicht-statische Methoden (oder Member-Funktionen in C++-Speak) de facto einen unsichtbaren, impliziten this-Parameter vom Typ Pointer auf Klasse der Member-Funktion haben. Eine Methode f wie diese hier

    struct A
    {
        void f(int x)
        {
            return x + y;
        }
    
        int y;
    };
    ...
    A a;
    a.f(5);
    

    kannst du dir wie so eine freie Funktion hier vorstellen:

    void f(A* this, int x)
    {
        return x + this->y;
    }
    ...
    A a;
    f(&a, 5);
    

    Zugriffe auf Member-Variablen wie hier y erfolgen dabei wie ein Zugriff über diesen Pointer.

    Das besondere an statischen Methoden ist, dass sie diesen this-Pointer auf die Instanz eben nicht haben und daher auch nicht implizit auf nicht-statische Member-Variablen einer Instanz zugreifen können - nur direkt, indem man ihnen z.B. eine Instanz als expliziten Parameter übergibt und über diesen auf die Member zugreift. Sie sind diesbezüglich wie freie Funktionen, mit dem Unterschied, dass sie im Geltungsbereich (Scope) der Klasse existieren.

    Man verwendet statische Funktionen gerne für Aufgaben, die zwar eng mit dem Typen (der Klasse) verbunden sind, jedoch nicht von einer konkreten Instanz abhängen.


Log in to reply