此指针

指针是指针被标记 、 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++关键字

此指针的类型

参数与和该指针