[C++] Zugriff auf Membervariablen



  • void Test_cls::SetNum()
    {
        m_num = 10;
    }
    
    void Test_cls::SetNum()
    {
        this->m_num = 10;
    }
    
    void Test_cls::SetNum()
    {
        Test_cls::m_num = 10;
    }
    

    Das Ergebnis dieser 3 Methoden ist gleich, aber wo genau liegt jetzt der Unterschied zwischen den Varianten ?
    Oder gibt es gar keinen ?


  • Mod

    Das Ergebnis dieser 3 Methoden ist gleich, aber wo genau liegt jetzt der Unterschied zwischen den Varianten ?
    Oder gibt es gar keinen ?

    In diesem Fall gibt es keinen Unterschied. Es sind gewisse Fälle konstruierbar, in denen es einen Unterschied gibt:

    void Test_cls::SetNum()
    {
        m_num = 10;
    }
    

    Die Standardvariante, funktioniert fast immer. Manchmal, wenn nicht ganz klar ist, wozu die Membervariable gehört (weil man komplizierte Vererbungssachen macht) muss man angeben, welche Variante man meint. das geht mit den anderen Schreibweisen.

    void Test_cls::SetNum()
    {
        Test_cls::m_num = 10;
    }
    

    Hier gibt direkt an, zu welcher Klasse der Member gehört. Nützlich vor allem bei Mehrfachvererbung und bei statischen Methoden ohne this Zeiger.

    void Test_cls::SetNum()
    {
        this->m_num = 10;
    }
    

    Sieht man oft, wenn mehrere Instanzen der gleichen Klasse gemeint sein könnten, etwa in Kopierkonstruktoren. Ist zwar nicht wirklich nötig, aber einfacher zu lesen. Ist bei bestimmten Konstruktionenen wenn man von Templates erbt nötig um deutlich zu machen, dass m_num überhaupt eine Membervariable bezeichnet und nichts anderes.



  • Danke, hat mir geholfen.



  • this-> braucht man noch in den Fällen, wo das Element aus einer Basisklasse kommt, welche von einem Template-Parameter abhängt.


Anmelden zum Antworten