오늘은 드디어 산술자 오버로딩에 대해 배우는 날..! 사실 c++에서 이게 제일 신기했다. 맨 처음 보는 순간 와..! 하는 감탄사가 절로 나왔다. 항상 생각했던게 내가 다루는 '객체의 종류마다 연산자가 다른 역할을 하게 할 순 없을까..?' 라는 것이었다. 예를 들면 벡터의 덧셈이라던가 하는 것들 말이다. 그런데 c++에서는 그게 가능하다..! 적어도 자바나, 파이썬에서 보지는 못했는데 있는지 모르겠다.
사실 많이 봐왔던 cout << x << endl; 에서 <<나 >>가 가능했던 이유도 연산자가 오버로딩이 되었기 때문이었다. 원래대로라면 비트의 쉬프트 연산이었을 것이다.
그래서 오늘은 실제로 이 오버로딩을 직접 해보았다. 벡터의 덧셈, 뺄셈, 나눗셈 등등을 구현해봤는데 다음과 같았다.
두 종류의 객체 사이에서 +, - 등의 연산을 진행할 때, 컴파일 과정에서 v1.operator+(v2) 이런 식으로 바뀐다고 한다. 따라서 operator+ 함수를 객체에서 오버로딩하면 우리가 원하는 연산을 진행할 수 있는 것이다.
class Vector
{
public:
float x;
float y;
float z;
Vector operator+() const
{
return *this;
}
Vector operator-() const
{
return Vector{-x, -y, -z};
}
Vector operator+(const Vector &v) const
{
return Vector{x + v.x, y + v.y, z + v.z};
}
Vector operator-(const Vector &v) const
{
return Vector{x - v.x, y - v.y, z - v.z};
}
float operator*(const Vector &v) const
{
return x * v.x + y * v.y + z * v.z;
}
Vector operator*(float a) const
{
return Vector{x * a, y * a, z * a};
}
Vector operator/(float a) const
{
return Vector{x / a, y / a, z / a};
}
Vector &operator++()
{
++x;
++y;
++z;
return *this;
}
Vector &operator--()
{
--x;
--y;
--z;
return *this;
}
Vector &operator++(int)
{
Vector tmp = *this;
++(*this);
return tmp;
}
Vector &operator--(int)
{
Vector tmp = *this;
--(*this);
return tmp;
}
void print() const
{
cout << "x : " << x << " y : " << y << " z : " << z << endl;
}
};
다만 vector가 const로 선언 되었을 경우, this 포인터가 넘어가는 것을 대비에 const를 붙여줘야하는데, 이 경우 후위연산자 ++, --나 전위 연산자 ++,--가 작동이 안된다. 다만 const로 안해도 작동이 잘 안되는 것 같은데.. 한 번 공부하고 검토를 해봐야겠다.
다만 이 연산자 오버로딩은 문제에서 사용하기는 어려울 것 같고, 나중에 혹시 게임 개발이나, 혹은 데이터 분석을 하는 경우에 다룰 수 있을 것 같다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 : https://bit.ly/3FVdhDa
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #C++실력완성올인원패키지
'패스트캠퍼스 챌린지(C++ 올인원)' 카테고리의 다른 글
패스트캠퍼스 챌린지 23일차 (0) | 2021.11.23 |
---|---|
패스트캠퍼스 챌린지 22일차 (0) | 2021.11.22 |
패스트캠퍼스 챌린지 20일차 (0) | 2021.11.20 |
패스트캠퍼스 챌린지 19일차 (0) | 2021.11.19 |
패스트캠퍼스 챌린지 18일차 (0) | 2021.11.18 |
댓글