this

보물창고·2023년 1월 16일
0

c++ basic 코드누리

목록 보기
33/50
post-custom-banner

this

: 객체 자신의 주소를 담고 있는 포인터

  • 멤버 함수 안에서만 사용가능한 키워드

객체 내 데이터들의 영역

  1. 멤버 데이터는 각 객체의 메모리 영역에 속함.
  2. 멤버 함수는 "객체와는 상관없이 코드 영역에 속함. "
  • 내부적으로 이런식으로 이루어졌다고 함.
class Point
{
	public : 
    void func(){};
}

// 여기서 
호출을 이렇게 한다고 하면
Point p ;
p.func();

// => 이렇게 되어 있음. 
func(&p);

// 함수 형태는 이렇게 생김. 
void func(Point *this)
 {
 	cout << this << endl; 
 }

problem

: Point 클래스를 만들고 2개의 객체 만들고,, print 함수를 만들고,
print 함수의 주소를 한번 출력해보자ㅣ.
-> print 함수에서 this 출력하고, 함수 주소 출력하라.
-> 외부에서 2개의 객체 주소도 출력하라 .

  • 결과
    : 객체로 함수의 주소 참조가 불가함.
    :: this의 주소값과 외부 객체의 주소가 동일하다는 것을 확인할 수 있음.

this 포인터의 활용

  1. 변수간의 이름 충돌을 방지함.
void foo(int a, int b)
{
	this.a = a;
    this. b = b;
}
  1. this를 반환하는 함수
    : 멤버함수를 연속적으로 사용이 가능함.
    -> cout 객체의 원리.
cout << "hello" << 1 << ", world" << endl;
  • 주의할 점.

    : *this를 반환할 때는 임시 객체 생성을 막기 위해 "참조 반환"을 해야함.

  • 코드

Point& set(int x, int y)
{
	this->x = x;
	return *this;
}

int main()
{
	Point p(1,2);
    p.set(1,3).set(30,40);
	
}

주의사항

  • this는 static 멤버에서 사용할 수 없음.
  • problem
    : 위의 내용을 코드로 확인하라.
    -> 복사가 호출되지 않고, 멤버 함수를 반복적으로 호출함.
profile
🔥🔥🔥
post-custom-banner

0개의 댓글