비버놀로지

[Modern C++] Operator Overloading(연산자 오버로딩) 본문

LANGUAGE STUDY/C C++

[Modern C++] Operator Overloading(연산자 오버로딩)

KUNDUZ 2023. 1. 17. 08:33
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