1998.6.3 조경민

this에 대해서

class cls{
public:
    int x,y;

    void print();
};

void cls::print()
{
    printf("%d %d",x,y);
}

라는 클래스가 있다고 하면
만일 내가

cls c1,c2,c3;
로 만들었다면 객체가 3개가 생기게 된다.
그런데 객체의 내용은 어떤것들이 들거 가게 되는것인가?

실제로 생기기는 c1,c2,c3를 위한 각각의 int x,y;들이
하나씩 생겨서 3개가 된다.
그러나 맴버 함수인 print는 단 한개가 생기게 된다.
이때 각각의 맴버변수는 데이타세그먼트에 들어가게 되고
print는 코드 세그먼트에 들어가게된다.

따라서 c1.print()를 쓰게 되면 print는 x,y를 찍기위해
이 함수를 부른 객체의 주소를 알아야 한다.
그것이 바로 this인 것이다.
즉 print는 다음과 같다.

void cls::print()
{
    printf("%d %d",this->x,this->y);
}

this는 객체 자신을 가리키는 포인터인데 이 함수가 불릴때
임시적으로 생기는 포인터이다. 만일 c1이 불렀다면 이 this는
&c1을 지니고 있는 것이다.
그런데 this가 함수가 호출될때(함수는 하나 존재한다.)
임시적으로 생긴다고 하는데 어떤 모양으로 생기게 되는것인가?
컴파일러는 임시 자동적으로 맴버 함수의 앞에다가
class-name * const this;
즉..
cls* const this;

주소를 변동할수 없는 this 클래스 포인터를 만들게 되는것이다.

'KB > C/C++' 카테고리의 다른 글

class에 대한 잡담  (0) 2004.03.19
dos에서 vga13h 쓰기  (0) 2004.03.19
rtti  (0) 2004.03.19
tc 라이브러리 만들기  (0) 2004.03.19
비트 연산  (0) 2004.03.19

+ Recent posts