(2) Operator Overloading
임의의 struct나 class를 사용할 때 operator를 써야할 상황이 있다. 예를 들어
struct Node {
int a;
int c;
};
Node a = {2,3};
Node b = {2,3};
Node c;
이 있다고 하자. 이 때, 'a와 b가 같은 것인가?' 와 'c에 a의 값을 저장하고 싶다' 두 상황을 '=='과 '='으로 표현하고 싶다.
이를 연산자 오버로딩을 통해 구현 해보자.
struct Node{
int a;
int b;
bool operator==(const Node& input)
{
return (a == input.a) && (b == input.b);
}
Node& operator=(const Node& input) //operator"표현식"(표현식의 입력) --> operator=(const Node& input)
{
a = input.a;
b = input.b;
return *this;
}
};
Node a = {2,3};
Node b = {2,3};
Node c;
if (a == b)
cout << "Yes" << endl;
c = a;
cout << "c의 a: " << c.a << "\tb: " << c.b << endl;
결과:
이 때!!
operator=(const ....)에서 const는 함수에서 입력에 영향을 주지 않겠다는 뜻이며
return *this는
이 때, 다음과 같이 3번에서 복사가 일어나는 것을 볼 수 있다. 따라서 이 예제에서는 복사를 피하기 위해
void operator=(const Node& input)
{
a=input.a;
b=input.b;
}
위와 같이 바꿀 수도 있다. 물론 복사가 필요한 경우에는 위와 같이 reference를 반환하게 함수를 작성해야 한다.
출처: https://stackoverflow.com/questions/14047191/overloading-operators-in-typedef-structs-c
https://edykim.com/ko/post/c-operator-overloading-guidelines/
'C++' 카테고리의 다른 글
c++] lambda 표현식을 차근차근 써보자(수정...) (0) | 2019.03.08 |
---|---|
c++] 레퍼런스와 연산자 오버로딩(1) (0) | 2019.03.06 |