Was ist ein this - Pointer ?



  • Hallo,

    ich weiß zwar was Pointer sind, aber ich stoße hier gerade im Code auf einen *this - pointer, der als Schleifenabbruchbedingung eingesetzt wird.

    Was ist das genau ?

    Danke



  • this zeigt innerhalb von Methoden immer auf die aktuelle Instanz der Klasse.


  • Mod

    Das ist bei Klassenmethoden ein Pointer auf das aktuelle Objekt.

    Ein Beispiel:

    class foo{
     public:
     void bar()
       {
          cout << this << endl;
       }
    };
    
    int main() {
     foo a,b;
     a.bar();   // Gibt &a aus;
     b.bar();   // Gibt &b aus;
    }
    


  • Der this-Pointer sollte eigentlich auch in jedem Anfängertutorial/Buch irgendwo erklärt werden. Schau einfach mal nach 🙂



  • Ok,

    ich habe immer noch ein kleines Verständnisproblem.

    volPointInterpolation* volPointInterpolationPtr_;

    Was macht dieser Aufruf ?

    volPointInterpolation(const volPointInterpolation&)

    Und dieser ? Nur sinngemäß.

    Was ist der Unterschied zwischen * und & bei Zeigern ?


  • Mod

    volPointInterpolation* volPointInterpolationPtr_;
    

    Dies deklariert einen Pointer namens volPointInterpolationPtr_ der auf ein Objekt vom Typ volPointInterpolation zeigen kann. (Natürlich nur wenn volPointInterpolation ein Typenname ist, ansonsten ist es der Multiplikationsoperator)

    volPointInterpolation(const volPointInterpolation&)
    

    Dies ist kein gültiges C++.

    Kann es sein, dass du eher sowas meinst:

    typenname volPointInterpolation(const volPointInterpolation&);
    

    dies deklariert eine Funktion namens volPointInterpolation, die ein Objekt vom Typ typenname zurückgibt. Als Parameter nimmt die Funktion eine Referenz auf ein const Objekt vom Typ volPointInterpolation.

    Was ist der Unterschied zwischen * und & bei Zeigern ?

    Auch hier glaube ich, dass du nicht nach dem fragst, was du meinst. Bei Zeigern ist * der Dereferenzierungsoperator und & der Adressoperator, aber du meinst wohl eher, was der Unterschied zwischen diesen beiden Sachen ist:

    void foo(int *a);
    
    void foo(int &a);
    

    Die Funktion mit dem * erwartet einen Zeiger. Diese Art der Übergabe sieht man oft, wenn die Funktion ein Array erwartet, denn dieses wird dann bei der Übergabe in einen Zeiger auf das erste Element umgewandelt.

    Die Funktion mit dem & erwartet eine Referenz. Eine Referenz ist sowas ähnliches wie ein Zeiger mit einer vereinfachten Syntax. Referenzen werden oft verwendet um Variablen "by reference" (wie der Name schon sagt) im Gegensatz zu "by value" (was der Standard ist, wenn man nichts angibt) zu übergeben. Das Thema Referenzen ist sehr wichtig, aber ich kann es hier nicht in ein paar Sätzen alles erklären. Das solltest du dir unbedingt in einem Lehrbuch ansehen.



  • Danke für die tolle Antwort, jetzt wird mir einiges klar. 🙂



  • SeppJ schrieb:

    volPointInterpolation(const volPointInterpolation&)
    

    Dies ist kein gültiges C++.

    könnte aber auch ein Teil einer aus dem Kontext gerissenen Kopier-Konstruktor-Deklaration sein. Ein "Aufruf" ist es jedenfalls nicht.

    Gruß,
    SP


Anmelden zum Antworten