Condividi tramite


questo puntatore

ciò il puntatore è un puntatore accessibile solo all'interno delle funzioni membro non static di una classe classe, struct, o unione tipo.Indica l'oggetto per cui la funzione membro è denominata.Le funzioni membro statiche non dispongono di un oggetto ciò puntatore.

this 
this->member-identifier

Note

un oggetto ciò il puntatore non fa parte dell'oggetto stesso; non viene riflesso nel risultato di un metodo sizeof istruzione sull'oggetto.Al contrario, quando una funzione membro non static è chiamata per un oggetto, l'indirizzo dell'oggetto viene passato dal compilatore come argomento nascosto alla funzione.Ad esempio, la chiamata di funzione seguente:

myDate.setMonth( 3 );

può essere interpretato nel modo seguente:

setMonth( &myDate, 3 );

L'indirizzo dell'oggetto è disponibile dalla funzione membro come ciò puntatore.La maggior parte dell'ciò essere implicita.È possibile, anche se necessario, utilizzare in modo esplicito ciò nel fare riferimento ai membri della classe.Di seguito è riportato un esempio:

void Date::setMonth( int mn )
{
   month = mn;            // These three statements
   this->month = mn;      // are equivalent
   (*this).month = mn;
}

l'espressione *this viene comunemente utilizzata per restituire l'oggetto corrente da una funzione membro:

return *this;

ciò il puntatore viene utilizzato per di da fare riferimento a se stessa:

if (&Object != this) {
// do not execute in cases of self-reference

[!NOTA]

Poiché ciò il puntatore non è modificabile, assegnazioni a ciò non sono consentiti.Tempestive realizzazioni delle assegnazioni concedere di C++ ciò.

occasionalmente, ciò il puntatore viene utilizzato direttamente ad esempio, per modificare le strutture di dati autoreferenziali, in cui l'indirizzo dell'oggetto corrente è obbligatorio.

Esempio

// this_pointer.cpp
// compile with: /EHsc

#include <iostream>
#include <string.h>

using namespace std;

class Buf 
{
public:
    Buf( char* szBuffer, size_t sizeOfBuffer );
    Buf& operator=( const Buf & );
    void Display() { cout << buffer << endl; }

private:
    char*   buffer;
    size_t  sizeOfBuffer;
};

Buf::Buf( char* szBuffer, size_t sizeOfBuffer )
{
    sizeOfBuffer++; // account for a NULL terminator

    buffer = new char[ sizeOfBuffer ];
    if (buffer)
    {
        strcpy_s( buffer, sizeOfBuffer, szBuffer );
        sizeOfBuffer = sizeOfBuffer;
    }
}

Buf& Buf::operator=( const Buf &otherbuf ) 
{
    if( &otherbuf != this ) 
    {
        if (buffer)
            delete [] buffer;

        sizeOfBuffer =  strlen( otherbuf.buffer ) + 1; 
        buffer = new char[sizeOfBuffer];
        strcpy_s( buffer, sizeOfBuffer, otherbuf.buffer );
    }
    return *this;
}

int main()
{
    Buf myBuf( "my buffer", 10 );
    Buf yourBuf( "your buffer", 12 );

    // Display 'my buffer'
    myBuf.Display();

    // assignment opperator
    myBuf = yourBuf;

    // Display 'your buffer'
    myBuf.Display();
}
  

Vedere anche

Riferimenti

Parole chiave C++

Questo tipo di puntatore

Corrispondenza dell'argomento e il puntatore questo