title: “C++ 5.this 포인터” categories:

  • CspecialCharspecialChar

    #C++ 5.this 포인터 : 네이버 블로그

저번 시간에는 객체와 포인터, 그리고 동적 할당에 대해 알아보았습니다

​

이번에는 this 라는 포인터를 알아보고 또 어떻게 사용되는지 알아보겠습니다

​

일단 this는 객체 자신에 대한 포인터입니다.

정확히는 객체의 맴버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체에 대한 주소입니다.

​

this의 특징으로는 전역 변수도 아니고 지역 변수도 아니다, 객체마다 존재한다, static 맴버 함수에는 사용할 수 없다가 있습니다

static에 대해서는 나중에 this와 함께 같이 설명하겠습니다

​

일단 예제를 보겠습니다

#include "pch.h"
#include 
using namespace std;
class rect {
 int w, h;
public:
 rect(int we, int he) {
 w= we,h = he;
 }
 int getarea();
};
int rect::getarea(){
 return w \* h;
}
int main()
{
 rect a(5, 10);
 cout << a.getarea() << endl;
}

처음 보는 rect(int we, int e)함수 내의

this -> w= w, this-> h=h; 부분만 설명하자면

​

입력받은 변수 we와 he를 클래스 내에 있는 변수 w와 h로 값을 전달하고 싶을 때 어떻게 해야할까요?

바로 위 코드와 같이 w= we, h=he로 하면됩니다

​

하지만 만약 입력받은 변수와 전달하고 싶은 변수의 이름이 같은 경우에는 어떻게 해야 할까요?

rect(int w, int h) {

w= w, h = h;

}

바로 대입하게 되면 변수의 이름이 같아 오류가 나게 됩니다

​

​

바로 이런 문제로 this 포인터가 필요합니다

#include "pch.h"
#include 
using namespace std;
class rect {
 int w, h;
public:
 rect(int w, int h) {
 this->w= w,this->h = h;
 }
 int getarea();
};
int rect::getarea(){
 return w \* h;
}
int main()
{
 rect a(5, 10);
 cout << a.getarea() << endl;
}

클래스 내 코드를 보게 되면 w,h라는 변수가 선언됩니다

​

그리고 아래 rect라는 생성자의 입력 변수도 w,h입니다

그렇게 되면 rect 내에서의 w,h의 의미는 입력받은 w,h가 되고 이 w,h를 클래스의 w,h에 옮기게 하려면 this 포인터르를 사용해 클래스의 변수에 옮기게끔 해야 합니다

​

이해하면 매우 쉽습니다

w,h가 각각 어디에 위치하는지 주의 깊게 살펴봐야 합니다

​

​

업데이트: