반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
C++ this포인터에 관하여 본문
반응형
this란?
-객체 자신의 포인터
-각 객체 속의 this는 다른 객체의 this와 다름
-컴파일러가 묵시적으로 삽입 선언함
-클래스 멤버 함수 내에서만 사용 가능
-static 멤버 함수에서 this 사용 불가
예제를 보면서 하나씩 봅시다
평범한 this 사용 예제
class Book{
int num;
public:
Book() { this->num=1; }
Book(int num) { this->num=num; }
void setBooknum(int num) {this->num = num; }
};
1. 객체 자신의 포인터
class Go{
public:
Go* f(){
return this; //this는 주소값
}
};
f() 함수는 주소값을 반환해야 함
this는 자기 자신의 주소값이니까 this로 반환 가능
2. 각 객체 속의 this는 다른 객체의 this와 다름
위의 코드로 b1.setBooknum(2); b2.setBooknum(3);을 실행 시키면
두 객체 안의 this는 각 객체의 num을 가리키고 있다
3. 컴파일러가 묵시적으로 삽입 선언함
class Go{
int num;
public:
void setNum(int a){
this->num = a;
}
};
이런 클래스가 있으면
class Go{
int num;
public:
void setNum(Go* this, int a){
this->num = a;
}
};
실제로 처리될 때는 컴파일러가 묵시적으로 이렇게 삽입
다른 예시:
Go ob;
ob.setNum(1);
이렇게 멤버 함수를 호출한다면
ob.setNum(&ob, 1);
ob의 주소가 this 매개 변수에 전달됨
4. 클래스 멤버 함수 내에서만 사용 가능
멤버 함수 밖에서는 this가 어디의 this인지 모르니까 당연히 사용 못함
객체와의 관련성이 없음
5. static 멤버 함수에서 this 사용 불가
객체가 생기기 전에 static 함수 호출이 먼저 시작
반응형
'언어 > C, C++' 카테고리의 다른 글
C언어 rand()함수 범위 간과하기 쉬운 부분 (0) | 2020.06.19 |
---|---|
char형 2차원 배열 입력받을 때 (0) | 2017.04.09 |
별 다이아몬드 출력 c언어 (0) | 2016.04.01 |
가운데 공백 다이아몬드 별찍기 c언어 (0) | 2016.04.01 |
C언어 가변인수함수(printf등) 내부구조 (0) | 2016.03.30 |
Comments