C++ Rookiss Part1 C++ 프로그래밍 입문 : 연산자 오버로딩 복습
🙇♀️연산자 오버로딩 복습
class Position // Position class의 기본 구조
{
public:
public:
int _x;
int _y;
};
🪐연산자 오버로딩 복습
- 연산자 오버로딩
- 일단 [연산자 함수]를 정의
- 함수도 멤버함수 vs 전역함수 처럼, 연산자 함수도 두가지 방식
- 멤버 연산자 함수 version
- a op b 형태에서 왼쪽 기준으로 실행됨 (a가 클래스여야 가능. a를 ‘기준 피연산자’라고 함)
- 한계) a가 클래스가 아니면 사용 못함
- 전역 연산자 함수 version
- a op b 형태라면 a, b 모두를 연산자 함수의 피연산자로 만들어준다
대입 연산자 (a = b)는 전역 연산자 version으로는 못 만든다
모든 연산자를 다 오버로딩 할 수 있는 것은 아니다 (:: . .* 안됨)
- 복사 대입 연산자
- 대입 연산자 중, 자기 자신의 참조 타입을 인자로 받는 것
🪐멤버 연산자 함수 version
Position operator+(const Position& arg)
{
Position pos;
pos._x = _x + arg._x;
pos._y = _y + arg._y;
return pos;
}
// 반대의 경우(정수 + 클래스)는 못만듦
// 만들고 싶으면 전역 연산자로 만들어야함
Position operator+(int arg)
{
Position pos;
pos._x = _x + arg;
pos._y = _y + arg;
return pos;
}
bool operator==(const Position& arg)
{
return _x == arg._x && _y == arg._y;
}
Position& operator=(int arg)
{
_x = arg;
_y = arg;
// this 는 자기 자신을 가리키는 포인터! (Position*)
// Position* this = 내자신의 주소;
return *this;
}
Position& operator++()
{
_x++;
_y++;
return *this;
}
Position operator++(int) // 복사값을 리턴함
{
Position ret = *this;
_x++;
_y++;
return ret;
}
🪐전역 연산자 함수 version
Position operator+(int arg, const Position& pos) // 전역 연산자 예시
{
Position retPos;
retPos._x = arg + pos._x;
retPos._y = arg + pos._y;
return retPos;
}
🪐복사 대입 연산자
// '복사'되길 원하는 특징때문에 특별 대우를 받음
// TODO) 동적할당때 더 자세히
Position& operator=(const Position& arg) // 복사 대입 연산자 예시
{
_x = arg._x;
_y = arg._y;
// this 는 자기 자신을 가리키는 포인터! (Position*)
// Position* this = 내자신의 주소;
return *this;
}