되새길겸 this 따로 정리
🔔this?
: 객체 자신에 대한 포인터로서 클래스의 멤버 함수 내에서만 사용된다
this는 전역 변수도 아니고, 함수 내에 선언된 지역 변수도 아니다.
this 는 객체의 멤버 함수가 호출될 때, 컴파일러에 의해 보이지 않게 전달되는 객체에 대한 주소이다.
컴파일러에 의해 탄생하는 변수이다.
this가 필요한 경우
Circle(){
this->radius = 1; //this->를 생략하고 radius = 1;로 해도 무관함
}
🔔this가 꼭 필요한 2가지 경우
1️⃣멤버 변수의 이름과 동일한 이름으로 매개 변수 이름을 짓고자 하는 경우
chicken(int BBurinkle){
this->BBurinkle = BBurinkle;
}
위와 같은 경우에 this를 기입해줘야한다.
2️⃣객체의 멤버 함수에서 객체 자신의 주소를 리턴할 경우
class Sample{
public:
Sample* f(){
~~~~~~~
return this; //현재 객체의 주소 리턴
}
};
연산자 중복을 구현 시, 위와 같은 경우가 많으며 this 없이는 연산자를 중복할 수 없는 경우도 있다.
this의 제약 조건
this가 필요한 경우
1️⃣ this는 클래스의 멤버 함수에서만 사용 가능
멤버가 아닌 함수에서의 this는 어떤 객체에도 속하지 않기 때문
2️⃣멤버 함수라도 정적 멤버 함수(static member function)는 this를 사용할 수 없다.
정젖 멤버 함수는 객체가 생성되기 전에 호출될 수 있고, 정적 멤버 함수가 실행되는 시점에 '현재 객체'는 존재하지 않을 수 있기 때문이다.
예로 하나의 클래스를 작성해보자
class Example{
private:
int a;
public:
void setA(int x){
this->a =x;
}
};
위의 코드가 개발자가 작성한 코드라면 아래 코드는 컴파일러에 의해 변환된 클래스다.
class Example{
private:
int a;
public:
void setA(Example *this,int x){
this->a =x;
}
};
컴파일러는 Example의 모든 멤버 함수에 매개 변수 'Example* this' 를 삽입한다.
컴파일러에 의해 변환된 Example클래스를 보면, 개발자가 작성한 this는 컴파일러가 삽입한 바로 그 this 매개변수인 것을 확인할 수 있다.
'I LEARNED > 이렇게쓰더라고' 카테고리의 다른 글
[이렇게쓰더라고] 10Base-T에서 T는 무슨 뜻일까? (6) | 2023.05.08 |
---|---|
[이렇게쓰더라고] 참조, 화살표 연산자 (1) | 2023.05.02 |
[이렇게쓰더라고] 엑셀 함수 정리 (0) | 2023.03.22 |
[이렇게쓰더라고] Markdown 문법정리 (2) | 2022.10.22 |
[이렇게쓰더라고] Markdown 사용 시 줄바꿈 방법 (0) | 2022.10.18 |
댓글