[STL] 연산자 오버로딩
by 브이담곰💡 연산자 오버로딩에는 두가지 방법이 있다.
- 멤버 함수를 이용한 연산자 오버로딩
- 전역 함수를 이용한 연산자 오버로딩
✅ 멤버 함수를 이용한 연산자 오버로딩을 사용할 수 없는 경우
이항 연산의 왼쪽 항이 연산자 오버로딩 객체가 아니면 멤버 함수를 이용한 연산자 오버로딩을 이용할 수 없다. 이항 연산의 왼쪽 객체를 기준으로 연산자 오버로딩 멤버 함수를 호출하기 때문이다.
class Point
{
...
};
int main()
{
Point pt1(1,2);
k + pt1; //여기서 k는 연산자 오버로딩 객체가 아니므로 k.operator+(pt1)처럼
// 호출할 수 없고 operator(k,pt1)처럼 호출해야 한다.
return 0;
}
👀 연산자 오버로딩은 컴파일러가 p1 == p2; 와 같은 코드를 두 가지로 해석한다.
(1) 멤버 함수로 p1.operator == (p2); 처럼 해석
-> p1의 operator ==() 멤버 함수를 호출해 p2를 인자로 전달
(2) 전역 함수로 operator ==(p1,p2); 처럼 해석
-> 전역함수 operator==()의 인자로 p1와 p2 객체를 각각 전달.
멤버 함수를 이용한 연산자 오버로딩
#include <iostream>
using namespace std;
class Point
{
int x;
int y;
public:
Point(int _x=0, int _y=0) : x(_x),y(_y){}
void Print()const { count<< x << ',' << y << endl; }
int GetX() const { return x; } // x의 getter
int GetY() const { return y; } // y의 getter
const Point operator-(const Point& arg) const
{
return Point(x - arg.x, y - arg.y);
}
};
int main()
{
Point p1(2,3), p2(5,5);
Point p3;
p3 = p1 - p2;
p3.Print();
return 0;
}
📌 p1 - p2 는 p1의 멤버 함수 p1.operator-(p2)를 호출하고 p2는 인자로 전달 된다.
전역 함수를 이용한 연산자 오버로딩
#include <iostream>
using namespace std;
class Point
{
int x;
int y;
public:
Point(int _x=0, int _y=0) : x(_x),y(_y){}
void Print()const { count<< x << ',' << y << endl; }
int GetX() const { return x; } // x의 getter
int GetY() const { return y; } // y의 getter
};
const Point operator-(const Point& argL,const Point& argR) const
{
return Point(argL.GetX - argR.GetX,argL.GetY - argR.GetY);
}
int main()
{
Point p1(2,3), p2(5,5);
Point p3;
p3 = p1 - p2;
p3.Print();
return 0;
}
📌 p1 - p2 는 전역 함수 operator-(p1,p2)를 호출하고 p1,p2는 인자로 전달 된다.
✅하지만, 전역 함수를 이용하면 Point 클래스의 private 멤버인 x,y에 접근할 수 없으므로 getter를 이용하거나 프렌드 함수를 사용한다.
friend const Point operator-(const Point& argL, const Point& argR);
const Point operator-(const Point& argL, const Point& argR)
{
return Point(argL.x - argR.x, argL.y - argR.y);
'programming > C++' 카테고리의 다른 글
[Soen] 비트 연산자 (0) | 2022.12.22 |
---|---|
[C++]C에서 C++문법으로 전환하기 (0) | 2022.07.06 |
[객체지향프로그래밍(2)]Finals Test Report : SceneManager 만들기(2) (0) | 2021.12.24 |
[객체지향프로그래밍(2)]Finals Test Report : HelicopterGame만들기(2) (0) | 2021.12.23 |
[객체지향프로그래밍(2)]Finals Test Report : HelicopterGame만들기. (0) | 2021.12.18 |
블로그의 정보
농담곰담곰이의곰담농
브이담곰