Aracılığıyla paylaş


Bu işaretçi

Bu işaretçidir yalnızca static olmayan üye işlevlerini erişilebilir bir işaretçi bir sınıfı, struct, veya Birliği türü.Bunun için üye işlevi çağrılır nesneye işaret etmiyor.Durağan üye işlevlerini kullanmayan bir Bu işaretçisi.

this 
this->member-identifier

Notlar

Bir nesnenin Bu işaretçiyi nesnenin kendisi; bir parçası değil sonucu yansıtılmaz bir sizeof deyimi nesnesi üzerinde.Bir nesne için başvuramaz üye işlev çağrıldığında, bunun yerine nesnenin adresi derleyici tarafından gizli bir bağımsız değişken olarak işlevine iletilir.Örneğin, aşağıdaki işlev çağrısı:

myDate.setMonth( 3 );

Bu şekilde yorumlanabilir:

setMonth( &myDate, 3 );

Nesnenin adresini üye işlevi içinde yaşayan Bu işaretçisi.Çoğu kullanımlarını Bu örtülü olan.Bunu açıkça kullanmak gereksiz bir rağmen yasal, Bu sınıfının bir üyesi için söz konusu olduğunda.Örne?in:

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

İfade *this geçerli nesnenin üyesi işlevinden döndürmek için yaygın olarak kullanılır:

return *this;

Bu işaretçi başvurusu karşı korumak için kullanılan aynı zamanda:

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

[!NOT]

Çünkü Bu nonmodifiable, işaretçiyi atamaları Bu izin verilmez.C++ uygulamalarında önceki atamalar için izin verilen Bu.

Bazen, Bu işaretçi doğrudan kullanılan — Örneğin, self-referential verileri işlemek için yapıları, geçerli nesnenin adresi gerekli olduğu.

Örnek

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

Ayrıca bkz.

Başvuru

C++ anahtar sözcükler

Bu işaretçi türü

Bağımsız değişken eşleşen ve bu işaretçi