2012-04-07 6 views
1

zum Beispiel in diesem, Ich bin sehr nicht über die diese Zeiger verstehen, diese Frage ist nicht über Operator + Überlastung, über diesen Zeiger ist, und seine Beziehung zwischen der Klasse,Wer kann mir "* dieser Zeiger" im Detail sagen?

* dieser Zeiger zeigt auf welches Ding?

Vielen Dank!

class Integer { 
     int i; 
    public: 
     Integer(int ii): i(ii) { } 
     const Integer operator+(const Integer& rv) const { 
      cout<<"operator+"<<endl; 
     } 

     Integer& 
      operator+=(const Integer& rv) { 
       i += rv.i; 
       return *this; 
     } 

    } 
+1

Was gutes C++ Programmierbuch hast du gelesen? In wenigen Minuten ist es schwer zu erklären, was ein ganzes Buch dir gibt. –

+0

Denken in C++, ich möchte herausfinden, etwas, was ich oft nicht sehr klar ist, wenn ich dieses Buch lese. Auch das ist, wo meine Frage am meisten kommt von – user1279988

+1

Was sollte das "Ding" sein, das Sie herausfinden möchten? Vielleicht würde diese zusätzliche Information uns helfen, Ihnen den richtigen Teil der Information über "das" zu sagen. – dexametason

Antwort

3

this identifiziert eine spezielle Art von pointer.IF Sie ein Objekt erstellen x der Klasse A genannt, und der Klasse A hat eine nicht-statische Member-Funktion f(). Wenn Sie die Funktion x.f() aufrufen, speichert das Schlüsselwort this im Rumpf von f() die Adresse von x. Sie können den this-Zeiger nicht deklarieren oder ihm Zuweisungen erteilen. Grundsätzlich this Zeiger wird als ein verstecktes Argument an alle nicht statischen Mitgliedsfunktionsaufrufe übergeben und ist als eine lokale Variable innerhalb des Körpers aller nicht statischen Funktionen verfügbar.

3

operator+= Bedarf einen Verweis auf das aktuelle Objekt zurück (nachdem er erhöht wurde), so dass Sie immer noch Code wie

// UGLY CODE, ONLY TO ILLUSTRATE A POINT 
Integer x, y; 
x = (y += 10) + 1; 

Diese Form des Operators (unter eine const Referenz schreiben (wird eine Referenz zurückgegeben) wird auch canonical Form genannt.

Woher erhalten Sie die Referenz für die Rückgabe? Sie haben this, die Punkte auf das aktuelle Objekt, aber Sie können einen Zeiger nicht zurückgeben. So können Sie den Zeiger dereferenzieren mit operator* und geben das Ergebnis:

return *this; 
+0

bekam eine Idee über den "dieser Zeiger" – user1279988

Verwandte Themen