Minwoo Dev.

[C++] 포인터 연산자 오버로딩, operator*, operator-> 본문

C++

[C++] 포인터 연산자 오버로딩, operator*, operator->

itisminu 2024. 7. 23. 11:19
728x90
반응형
SMALL

이번에는 포인터 연산자를 오버로딩해보겠다.

 

 

우선 *연산자와 -> 연산자의 특징들을 알아보자

 

*연산자

예시 ) *num

포인터 변수의 실제 값을 반환

 

-> 연산자

예시 ) num->~~

포인터 변수의 주소값을 반환

 

 

 

이 특징들을 살려서 연산자 오버로딩을 해보겠다.

 

int형 값을 담는 Number 클래스를 만들어 작성해보겠다.

 

 

#include<iostream>
using namespace std;

class Number{
private:
    int num;
public:
    Number(int n):num(n){}
    void ShowData() { cout << num << endl; }

    Number * operator->(){
        return this;
    }

    Number& operator*(){
        return *this;
    }
};

 

 

위 코드에서 연산자 오버로딩을 수행한 부분을 자세히 보자.

Number * operator->(){
        return this;
    }

 

우선, this 자체는 자신이 속한 객체의 주소를 나타낸다.

-> 연산자는 해당 포인터의 멤버에 접근하기 위해서 주소값을 반환해야한다.

따라서 자기가신의 주소값인 this를 반환하면 되는 것이다.

 

Number& operator*(){
        return *this;
    }

 

* 연산자는 해당 주소값을 가지는 실제 값을 반환해야 하므로 참조값으로 *this를 반환해 주소값이 가리키는 실제 값을 반환한다.

 

 

main 함수도 추가하여 결과를 함께 보자

#include<iostream>
using namespace std;

class Number{
private:
    int num;
public:
    Number(int n):num(n){}
    void ShowData() { cout << num << endl; }

    Number * operator->(){
        return this;
    }

    Number& operator*(){
        return *this;
    }
};

int main(void){
    Number num(20);
    num.ShowData();

    (*num) = 30;
    num->ShowData();
    (*num).ShowData();
    return 0;
}

 

 

실행 결과

 

 

포인터에 대해 알고있다면 main함수에 각 코드에 대해 왜 이런 결과가 나타나는지 잘 이해할것이라 믿는다.

728x90
반응형
LIST