Partager via


ce pointeur

Le pointeur de cela est un pointeur accessible uniquement dans les fonctions membres non statiques de classe, d' struct, ou du type d'union.il indique l'objet pour lequel la fonction membre est appelée.Les fonctions membres static n'ont pas un pointeur de cela .

this 
this->member-identifier

Notes

Le pointeur de cela d'un objet n'est pas partie de l'objet lui-même ; il n'est pas répercutée dans le résultat d'une instruction d' sizeof sur l'objet.En revanche, lorsqu'une fonction membre non statique est appelée pour un objet, l'adresse de l'objet est passée par le compilateur comme argument masqué à la fonction.par exemple, l'appel de fonction suivant :

myDate.setMonth( 3 );

peut être interprétée de la façon suivante :

setMonth( &myDate, 3 );

l'adresse de l'objet est disponible de la fonction membre comme pointeur de cela .La plupart des utilisations de cela implicites.Elle est reconnue, bien qu'inutile, pour utiliser explicitement cela en vous référant aux membres de la classe.Par exemple :

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

L'expression *this est fréquemment utilisée pour retourner l'objet actuel d'une fonction membre :

return *this;

Le pointeur de cela est également utilisé pour vous protéger des autoréférence :

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

[!REMARQUE]

Étant donné que le pointeur de cela est non modifiable, vous ne pouvez pas utiliser de assignations à cela .Les implémentations précédemment C++ autorisaient les assignations à cela.

Parfois, le pointeur de cela est utilisé directement - par exemple, pour manipuler les structures de données auto-référentielles, dont l'adresse de l'objet actuel est requise.

Exemple

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

Voir aussi

Référence

Mots clés C++

Type de ce pointeur

Correspondance d'argument et le ce pointeur