안녕하세요^^
this 포인터는 클래스의 오브젝트 자체를 가리키는 포인터입니다.
예를 들어서
class CTv
{
private:
char m_Name[CHAR_MAX];
public:
void Name(char *szString);
char* Name(void);
CTv& operator=( const CTv& rObj );
};
void CTv::Name(char *szString) { strcpy(this->m_Name, szString); }
char* CTv::Name(void) { return this->m_Name; }
CTv& operator=( const CTv& rObj ) { this->Name(rObj.Name()); return *this; }
void main()
{
CTv myTv, yumiTv, yourTv, sisterTv, parentsTv;
myTv.Name("LG TV");
yumiTv=yourTv=sisterTv=parentsTv=myTv;
cout << yumiTv.Name() << yourTv.Name() << sisterTv.Name() << parentsTv.Name() << endl;
}
위와 같이 클래스를 짰다고 봅시다.
그럼 우리가 CTv 객체를 생성합니다.
CTv myTv;
myTv.Name("LG TV");
라고 했을 때 위해서 void Name(char *szString) 함수 안에서 this 포인터는 myTv 를
가리키는 포인터가 됩니다. 사실 멤버함수를 짤 때 this 포인터를 쓰는 것은 무의미하겠죠^^
그럼 operator = 는 어떻게 되느냐.
CTv sumiTv, yourTv, systerTv, ParentsTv;
라고 했을 때
수미의 Tv , 당신의 Tv 누나의 Tv 부모님의 Tv 모두다가 LG TV 일 때
sumiTv=yourTv=systerTv=ParentsTv=myTv;
라고 하면 무슨 일이 벌어질까요?
위의 코드는 다음의 코드와 같습니다.
sumiTv.operator=(yourTv.operator=(systerTv.operator=(ParentsTv.operator=(myTv))));
그럼 위의 코드를 분석해 보면 myTv 가 ParentTv의 operator= 에 인자로 넘겨져서(참조자로)
myTv 의 이름을 ParentsTv 의 이름으로 복사하죠.
ParentsTv.operator=() 안에서 this 는 ParentTv 를 가리키죠. 자신의 이름을 myTv 로 부터
복사한다음 자신을 리턴하는것입니다. 그래야 systerTv 의 이름이 만들어 질 수 있겠죠^^
이런것이 반복되는 것입니다.
결과는 LG TVLG TVLG TVLG TV 입니다^^
우리가 자주 쓰는 cout << "hello" << "hihi" << ";" << endl;
도 cout 의 operator<<() 을 반복적으로 호출해서 자신의 포인터(operator<<()을 호출한 객체의 this 포인터)를 계속해서 리턴하는것이겠죠.
많은 도움이 되길 바랍니다^^
김진수 님이 쓰신 글 :
: //----------------------------------------
:
: class degree
: {
: private:
: double numerator;
: double denominator;
:
: public:
: ......
:
: }
:
:
: //배정 연산자의 중복
: degree& operator=( const degree& copyfrom )
: {
: numerator = copyfrom.numerator;
: denominator = copyfrom.denominator;
: return *this;
: }
:
: 1.예제 메인함수 부분에 이걸 사용하지를 않아서 어떻게 되는지 모르겟습니다...
: *this 가 가리키는 것은 어떤곳인가요?
:
: 2. 간단한 예제를 쓰고 설명해주시면 정말 감사
|