이 포인터
이 포인터 포인터를 비정적 멤버 함수에만 액세스할 수 있습니다는 클래스, struct, 또는 union 형식입니다.이 대 한 멤버 함수를 호출 하는 개체에 가리킵니다.없는 정적 멤버 함수는 이 포인터입니다.
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();
}