Minwoo Dev.
[C++] 포인터 연산자 오버로딩, operator*, operator-> 본문
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
'C++' 카테고리의 다른 글
[C++] 윤성우의 열혈 C++ 13-2 클래스 템플릿의 정의 문제풀이 (2) | 2024.07.23 |
---|---|
[C++] 윤성우의 열혈 C++ 13-1 함수 템플릿의 정의 문제풀이 (0) | 2024.07.23 |
[C++] operator new, operator new[] (1) | 2024.07.23 |
[C++] 배열의 인덱스 연산자 오버로딩, operator[] (0) | 2024.07.23 |
[C++] 윤성우의 열혈 C++ 11-2 C++ 기반의 데이터 입출력 문제풀이 (0) | 2024.07.21 |