일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Gem
- 비트겟
- Spring
- regression
- 백준
- c
- 자바
- 회원가입
- 회귀
- spring boot
- SWEA
- 스포티파이
- python
- Computer Science
- modern c++
- Baekjoon
- SW Expert Academy
- Spring JPA
- CS
- SECS/GEM
- programmers
- C++
- SECS
- 파이썬
- Spotify Api
- MYSQL
- SECS-II
- java
- spotify
- 프로그래머스
Archives
- Today
- Total
비버놀로지
[Modern C++] Operator Overloading(연산자 오버로딩) 본문
728x90
Operator Overloading(연산자 오버로딩)
- primitive type은 연산자를 default로 사용 가능하다.
- int a=3, b=4;
- a == b : true
- a + b : 7
- a > b : false
- custom data type은??
- struct Data {int x,y;};
- Data a, b;
- a == b ?
- a + b ?
- a > b?
특정한 기준이 없으므로 연산자를 사용할 수 없다.
이를 정의해주는게 operator overloading(연산자 오버로딩)
Member function Overloading (global function overloading은 생략)
struct Data {
int x, y;
bool operator==(Data r) {
return x == r.x && y == r.y;
}
bool operator<(Data r) {
if (x != r.x) return x < r.x;
return y < r.y;
}
void operator()() {
cout << x << ' ' << y;
}
void operator()(Data r) {
x += r.x;
y += r.y;
}
};
Data a, b;
a == b : a.operator==(b)
a < b : a.operator<(b)
a() : a.operator()()
a(b) : a.operator()(b)
operator() : function call operator
함수를 인자로
STL container에서 기준 설정할 때 활용(다른 방법도 있지만 우리에게는 이거 밖에 없다고 가정)
- set<T, Compare>
- unordered_set<T, Hash, KeyEqual>
Compare, Hash, KeyEqual : function object
Function object (functor)
- function call operator()를 정의하여 함수처럼 사용가능한 객체
- 인라인 치환
- 상태를 가질 수 있다
- 다른 함수의 인자로 전달될 수 있다.
struct Sum_n {
int operator()(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) sum += i;
return sum;
}
}sum_n;
cout << sum_n(10); // 55
cout << Sum_n{}(10); // 55
cout << Sum_n()(10); // 55
728x90
'LANGUAGE STUDY > C C++' 카테고리의 다른 글
[Modern C++] lambda (0) | 2023.01.17 |
---|---|
[Modern C++] Predefined Functor (0) | 2023.01.17 |
[Modern C++] Operator (0) | 2023.01.17 |
[Modern C++] mem function (0) | 2023.01.16 |
[Modern C++] Initializer list 초기화 리스트 (0) | 2023.01.16 |
Comments