C++ 5.this 포인터
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가 각각 어디에 위치하는지 주의 깊게 살펴봐야 합니다