C++ 연산자 오버로딩 정리 📌
내가 공부하다가 도저히 정리가 안되고 계속 오류만 떠서 공부하려고 정라하는 내용
C++에서 연산자 오버로딩을 활용하면 사용자 정의 구조체나 클래스를
STL 함수(sort, max_element 등)와 함께 쉽게 사용할 수 있다.
🔹 연산자 오버로딩(operator overloading)이란?
: C++에서 제공하는 연산자(+, <, == 등)를
사용자 정의 타입(구조체, 클래스)에서도 사용할 수 있도록 정의하는 기능
예제: 기본 구조체
struct Data { int x, y; };
위와 같은 구조체가 있을 때, std::sort()를 사용하여 정렬하려고 하면
비교 기준을 정의하지 않았으므로 오류가 발생하는데,
이를 해결하기 위해 < 연산자를 오버로딩할 수 있다.
🔹 비교 연산자 < 오버로딩
나는 1) x큰 순, 2) y큰 순(x 값이 같을 때)으로 우선순위를 둬서 < 연산자를 정의하려고 한다.
struct Data {
int x, y;
// 비교 연산자 오버로딩
bool operator<(const Data &a) const {
if (x != a.x) return x < a.x; // X 기준 정렬
return y < a.y; // X가 같다면 Y 기준 정렬
}
};
📌 const 키워드는 객체를 수정하지 않겠다는 의미!!!!!
📌 operator< 연산자를 정의하면 sort() 같은 함수에서 자동으로 적용됨
사용 예시
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
Data arr[] = {{3, 4}, {5, 1}, {3, 1}, {2, 2}};
int N = 4;
sort(arr, arr + N); // 오름차순 정렬
for (int i = 0; i < N; i++)
printf("(%d,%d) ", arr[i].x, arr[i].y);
printf("\n");
return 0;
} // 출력 결과 (2,2) (3,1) (3,4) (5,1)
🔹 STL 정렬을 위한 사용자 정의 비교 함수
특정한 기준으로 정렬해야 하는 경우,
STL의 sort()에서 **비교 함수(Comparator)**를 사용할 수도 있다.
나는 1) y값이 작은순 2) x값 큰순 (y 같을 때)를 기준으로 만들어보려고 한다
bool comp(const Data &a, const Data &b) {
if (a.y != b.y) return a.y < b.y; // Y 기준 정렬
return a.x > b.x; // Y가 같다면 X 기준 정렬
}
사용 예시
sort(arr, arr + N, comp); // 사용자 정의 비교 함수 사용
🔹 최댓값, 최솟값 찾기 (max_element, min_element)
연산자 < 를 오버로딩하면 max_element(), min_element() 등을 사용가능!
auto Max = *max_element(arr, arr + N);
printf("최댓값: (%d,%d)\n", Max.x, Max.y);
operator< 를 오버로딩했기 때문에 max_element()가 자동으로 비교 기준을 적용한다.
🔹 객체 출력 연산자 << 오버로딩
C++에서 cout을 사용하여 구조체를 출력하려면 operator<<를 오버로딩해야 한다.
#include <iostream>
using namespace std;
struct Data {
int x, y;
// 출력 연산자 오버로딩
friend ostream& operator<<(ostream &out, const Data &d) {
out << "(" << d.x << "," << d.y << ")";
return out;
}
};
int main() {
Data d = {3, 4};
cout << d << endl; // (3,4) 출력
}
✅ printf를 사용하면 cout 오버로딩 없이도 출력할 수 있다.
printf("(%d,%d)\n", d.x, d.y);
🔹 정리
|
연산자
|
사용 목적
|
예제
|
|
operator<
|
비교 연산 (정렬, max/min 찾기)
|
sort(arr, arr + N);
|
|
operator<<
|
출력 연산 (cout 지원)
|
cout << obj;
|
|
사용자 정의 비교 함수
|
특별한 정렬 기준 적용
|
sort(arr, arr + N, comp);
|
💡 TIP:
- 연산자 오버로딩을 활용하면 STL 함수(sort, max_element 등)를 편리하게 사용할 수 있음.
- operator<만 정의해도 sort(), max_element(), min_element() 등이 자동으로 적용됨.
- 객체를 cout으로 출력하려면 operator<<를 오버로딩해야 함.
- 빠른 실행이 필요하면 printf()로 직접 멤버 변수를 출력하는 것이 유리함.
얼렁뚱땅 연산자 오버로딩 정리 끝~!
나중에 또 쓸일 있으면 구글링 하는 대신 이거 보고 할 수 있길 바라며...
'C++' 카테고리의 다른 글
| c++로 조합 구현하기 (0) | 2025.06.19 |
|---|---|
| 데이터 파싱 (0) | 2025.06.17 |
| 정렬용 비교 함수 객체 (0) | 2025.06.17 |
| 포인터 (나중에 다시 또 공부하기;) (1) | 2025.06.17 |
| 배열 (0) | 2025.06.17 |