본문 바로가기
C++{Diary}

[C++] this 포인터 왜 쓸까?

by 토끼여우 2023. 7. 16.
728x90
SMALL

C++을 공부하다가 this포인터를 공부하면 this포인터의 의미가

"개발자가 작성중인 클래스의 실제 인스턴스에 대한 주소를 가리키는 포인터"

라고 배우게됩니다

 

즉 클래스의 멤버 변수를 가리킵니다

근데 이런 의문이 들었습니다

"근데 this포인터를 안써도 실행결과에 차이는 없는데?"

 

그래서 검색을 해보면서 this포인터를 왜 써야하는지 

어떤 경우에 써야하는지를 알아봤습니다

 

써야하는 경우를 서두에 먼저 말하자면

  • 멤버 변수와 매개변수 이름이 충돌하는 경우
  • 멤버 함수가 다른 멤버함수를 호출하는 경우
  • 객체 자신의 반환하는 경우

 

멤버 변수와 매개변수 이름이 충돌하는 경우




이런 경우의 예시 코드를 보겠습니다

class MyClass {
private:
    int value;

public:
    void SetValue(int value) {
        this->value = value;
    }
};

위에의 코드를 보면

멤버변수로 value가 있고 멤버변수의 매개변수인 value 가 있습니다

인스턴스명이 동일하므로 잘못하면 코드에서 에러가 나는 경우가 있을수있습니다

그러므로 setValue에서 매개변수 value를 this->value(클래스의 멤버변수 value를 가리킴) 멤버변수인 value에다가 값을 대입합니다

 

다음 경우를 보겠습니다

 

멤버함수가 다른 멤버함수를 호출하는 경우





똑같이 코드부터 봅시다

 

class MyClass {
private:
    int value;

public:
    void SetValue(int value) {
        this->value = value;
        PrintValue();
    }

    void PrintValue() {
        cout << "Value: " << this->value << endl;
    }
};

setValue 멤버 함수내에서 printValue함수가 호출되는데 printValue함수는 클래스내의 멤버변수를 출력하는 함수입니다

setValue함수의 인자인 value의 값이 아닌 멤버변수값이 출력이 됩니다 어쩌피 위에 코드에서 value를 this->value; 라고 정의 해서 차이는 없습니다

 

마지막 경우를 봅시다

 

객체 자신을 반환하는 경우






이번에도 코드를 봅시다

class MyClass {
private:
    int value;

public:
    MyClass(int value) : value(value) { }

    MyClass* GetSelf() {
        return this;
    }
};

생성자 초기화 목록으로 value라는 Myclass 생성자의 매개변수에 value라는 사용자의 입력을 받는 value를 선언하고 정의 합니다 밑에 GetSelf를 MyClass의 포인터 변수로 지정하여 this를 반환하는데 여기서 this는 사용자의 입력받는 값이 아닌

멤버변수의 값을 나타냅니다

 

 

이렇게 this포인터를 써야하는 경우를 알아봤습니다

728x90
LIST