[C++] this 포인터

우니·2022년 10월 27일
0

일반 멤버함수/멤버변수, static 멤버함수/멤버변수의 관계를 그림으로 정리해보았다.
빨간색으로 X쳐져 있는 것은 직접 접근할 수 없다는 뜻이다.

클래스의 외부에서는 클래스의 멤버함수를 직접적으로 호출할 수 없다. 인스턴스를 지정하고, 인스턴스를 통해서만 호출이 가능하다.

자 이제 위에 그림을 참고하여 하나하나 살펴보자.
S1 인스턴스에서 Show() 함수를 호출하면 출력 내용은 김XX
S2 인스턴스에서 Show() 함수를 호출하면 출력 내용은 정XX
S3 인스턴스에서 Show() 함수를 호출하면 출력 내용은 박XX

이처럼 어떤 인스턴스에 의해 호출되었는지에 따라 값이 달라진다.
이것은 this 포인터 덕분이다.

엥? this 포인터가 안보이는데 어딨다는거야. 싶을 수 있다.
this 포인터는 인스턴스 내부에 있다.
모든 클래스의 인스턴스는 내부적으로 자기 자신을 가리키는 this 포인터를 가지고 있다.

int main(void)
{
	'''
    s1.show();
    ...
}
void Student::Show()
{
	cout << name << endl;
}

우리는 이와 같이 코딩을 하지만

int main(void)
{
	'''
    s1.show(s1.this);
    ...
}
void Student::Show(Student *this)
{
	cout << this->name << endl;
}

컴파일러가 이처럼 만들어준다.
인스턴스를 지정하고 멤버함수를 호출하면 내부적으로 this 포인터가 멤버함수에 전달되고, 멤버함수는 이 포인터를 이용하여 해당 인스턴스의 멤버변수를 참조한다.

0개의 댓글