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();
}