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;
}