共用方式為


這個指標

這個指標是指標只能內的非靜態成員函式存取類別, struct,或等位型別。 它會指向成員函式會呼叫物件。 靜態成員函式並沒有這個指標。

this 
this->member-identifier

備註

物件的這個指標不是物件本身。 它並不會反映在結果中的sizeof在物件上的陳述式。 相反地,非靜態成員函式呼叫時的物件,物件的位址已經傳遞編譯器做為隱藏的引數的函式。 例如,下列的函式呼叫:

myDate.setMonth( 3 );

可被解釋這種方式:

setMonth( &myDate, 3 );

物件的位址是從與該成員函式中使用這個指標。 大多數的用途的這個是隱含。 它是合法的但沒有必要的精確地使用這個類別的成員來稱呼。 例如:

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

運算式*this通常用來從成員函式會傳回目前的物件:

return *this;

這個指標也可以用來防範自我參考:

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

因為這個 指標是不可修改,指派給 這個不允許。較早的 C++ 的實作允許指派給這個

有時候, 這個指標直接使用 — 例如,操作可以資料結構,需要目前物件的地址的位置。

範例

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

請參閱

參考

C + + 關鍵字

此指標型別

引數對應和 this 指標