Operator
흔히 아는 +,-,==,>, < 수학적/논리적 연산을 말한다.
각 class에 따라 operator를 redefine 할 수 있고 이것을 operator overloading이라한다.
custom type에 맞게 tailor를 할 수 있다.
피연산자, 반환 값을 결정해야 하고 그것에 맞춰 구현하는 function의 형태이다.
사실 convention과 expectation을 맞춰서 function꼴로 만들어야 하는데 사실상 제약은 없다.
그래도.. convention에 맞춰서 해주면 좋다고 한다.(rule이니깐)
[] Subscript Operator
- Purpose: v [i]는 v의 i번째 element에 접근하는 것을 목표로 한다.
- Syntax: 보다시피 입력으로 int index를 넣어주고 T& reference를 반환해 준다. reference가 아니었으면 index의 값을 진짜 copy 해서 반환했을 거다. 근데 reference로 하는 게 좀 더 계산한 때 좋으니깐 저렇게 설정한 듯하다.
+Addition Operator
- Purpose: element wise sum을 수행한다.
- Syntax: operator+로 정의하여 사용하는데 오른쪽에서 피연산자를 받는다. 이 경우는 arithmetic 연산으로 새로운 object를 출력한다. 따라서 reference값이 아닌 바로 copy 값을 출력한다.
+=Addition Assignment Operator
- Purpose: v += v는 v에 v를 element wise로 더하라는 것이다. add와 비슷하게 오른쪽에 있는 게 입력으로 들어간다.
- 입력으로 reference값을 받음
- add와 다르게 reference를 반환하기 때문에 chaining연산이 가능하다.
여기서 rhs.array [i]나 rhs [i] 둘 다 동일한 거다.
++Prefix Increment Operator
in-place에서 1씩 증가시키는 method이다.
인자로는 아무것도 안 받고 array [i] 그 자리에서 하나씩 증가시킨다.
이 연산도 동일하게 reference를 반환한다.
++Postfix Increment Operator
operator++에 있는 int는 단지 Prefix operator와 구분하기 위한 것이다.
temp에 업데이트되기 전 상태를 보관하고 내부적으로 1씩 증가하게 한다.
이후 temp를 출력한다.
temp는 reference가 아닌 original object의 copy이다.
<<insertion operator
v<<e는
새로운 element e를 v에 append 하는 연산이다.
입력으로 literal(고정된 값)을 받으려면 항상 const를 선언해야 한다.
const를 통해 literal이 바뀌지 않는다고 보장해야 하기 때문이다.
reference을 반환하기 때문에 chaining이 가능하다.
==Equality Operator
같은 element가 있는지 확인해서 반환하는 것이다.
왼쪽이 호출을 당하고 오른쪽이 피연사자로 들어간다.
같은 type이 들어와야 하고 if로 size가 다르면 그냥 False이다.
return으로 bool을 반환한다.
bool Operator
- Purpose: 어떤 v가 있을 때 이게 false인지 true인지 확인하는 것
Simplevector to bool으로 할 때 어떻게 되는지 보느게 저것을 하는 것임
if(vec1)이면 compiler가 스스로 vec1을 type conversion을 시도한다.
왜냐하면 vec1이 conditional statements에 있기 때문이다.
그럴 때 저 operator를 보고 type conversion을 해서 이용한다
Operator Overloading as Non-member function
지금까지는 class안에서 method로 정의했다
그런데 이렇게 안 하고 global scope에서 해도 된다.
지금 보면 왼쪽 오른쪽이 피연산자로 들어가고 operator앞에 ::와 같이 scope을 나타내는 것이 생략되었다.
benefit
class 그 자체를 고칠 필요 없이 원하는 method를 추가해서 class에 그 동작을 구현할 수 있다.
예를 들어 string 같은 건 고치기 힘든데 non member function을 이용하면 원하는 method를 구현할 수 있다.
member function과 Non member function이 동시에 있을 경우는 member function이 우선 적용된다.
'Computing' 카테고리의 다른 글
[C++] C++에서 class 배우기 (0) | 2025.04.10 |
---|---|
[빅데이터 및 지식관리시스템] Business question에 대해 답하기 위한 Analytic Functions 정리 (1) | 2025.04.08 |
[빅데이터 및 지식관리시스템] SQL에서 모든 것에 대한 만족을 표현하고 싶을때..? (0) | 2025.04.06 |
[빅데이터 및 지식관리시스템] TPC-C Benchmarking (1) | 2025.04.03 |
[C++] Function Overloading과 Template (0) | 2025.04.02 |