🙇‍♀️연산자 오버로딩 복습

class Position // Position class의 기본 구조
{
public:

public:
	int _x;
	int _y;
};


🪐연산자 오버로딩 복습

  • 연산자 오버로딩
    • 일단 [연산자 함수]를 정의
    • 함수도 멤버함수 vs 전역함수 처럼, 연산자 함수도 두가지 방식


  1. 멤버 연산자 함수 version
    • a op b 형태에서 왼쪽 기준으로 실행됨 (a가 클래스여야 가능. a를 ‘기준 피연산자’라고 함)
    • 한계) a가 클래스가 아니면 사용 못함


  1. 전역 연산자 함수 version
    • a op b 형태라면 a, b 모두를 연산자 함수의 피연산자로 만들어준다


대입 연산자 (a = b)는 전역 연산자 version으로는 못 만든다

모든 연산자를 다 오버로딩 할 수 있는 것은 아니다 (:: . .* 안됨)


  1. 복사 대입 연산자
    • 대입 연산자 중, 자기 자신의 참조 타입을 인자로 받는 것


🪐멤버 연산자 함수 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;
}

태그:

카테고리:

업데이트: