C++ 개념 공부

C++ 연산자 오버로딩

taene_ 2023. 8. 26. 15:18
#include <iostream>
using namespace std;

//< 연산자 오버로딩>
//1. 멤버 연산자 함수 버전
//	- a op(operation) b 형태에서 왼쪽을 기준으로 실행(a는 클래스이다)
//	-
//
//2. 전역 연산자 함수 버전
//	- a op b 형태라면, a/b 모두를 연산자 함수의 피연산자로 사용

class Pos
{
public:
	Pos()	//기본 생성자
	{

	}

	Pos(int b)	//생성자	//explicit는 Pos pos1(10)형태만 이 함수로 받아들인다
	{								//Pos pos1 = 10; 을 못쓰게한다.
		x = b;
		y = b;
	}

	Pos operator+(const Pos& b)	//1. 멤버 연산자 함수 버전
	{
		Pos pos;
		pos.x = x + b.x;
		pos.y = y + b.y;
		return pos;
	}

	Pos operator+(int b)
	{
		Pos pos;
		pos.x = x + b;
		pos.y = y + b;
		return pos;
	}

	bool operator==(const Pos& b)
	{
		return x == b.x && y == b.y;
	}

	//대입 연산자
	void operator =(int b)
	{
		x = b;
		y = b;
	}

	int x = 0;
	int y = 0;
};

Pos operator+(int a, const Pos&b)	//2. 전역 연산자 함수 버전
{
	Pos pos;
	pos.x = a + b.x;
	pos.y = a + b.y;
	return pos;
}

int main()
{
	Pos pos1;
	Pos pos2;
	
	Pos pos3 = pos1 + pos2;	//Pos pos3 = pos1.operator+(pos2);
	Pos pos4 = pos1 + 10;

	Pos pos5(10);	//Pos pos5 = 10;
	Pos pos6 = 20;	//생성자 Pos(int b)로 받아들이고 실행한다,
					//하지만 생성자 explicit Pos(int b)를 해주면 Pos pos1 = 10; 형태로 생성자를 못쓰게한다.
					
	//대입
	pos1 = 10;
	pos2 = 20;
}