Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[220] Re:[질문] *this 가 가리키는 곳은 어디 인가요?
김성철 [douner] 3985 읽음    2002-01-12 22:31
안녕하세요^^
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. 간단한 예제를 쓰고 설명해주시면 정말 감사

+ -

관련 글 리스트
212 [질문] *this 가 가리키는 곳은 어디 인가요? 김진수 2725 2002/01/11
220     Re:[질문] *this 가 가리키는 곳은 어디 인가요? 김성철 3985 2002/01/12
216     class의 object instance 를 가르킵니다. 박정모 4018 2002/01/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.