operator overloading : 하나의 연산자를 여러 의미로 사용할 수 있게 하는 것이다. C++ 에서는 연산자 오버로딩을 사용자 정의 타입까지 확장할 수 있으며, 클래스도 하나의 타입임을 확실히 보여준다.
operator function (연산자 함수) : C++ 에서는 연산자를 오버로딩하기 위해서 연산자 함수라는 것을 사용한다.

연산자 함수는 operator 키워드를 사용하여 연산자를 오버로딩한다. 오버로딩할 연산자는 적법한 C++ 연산자이며, operator 키워드와 공백 없이 연결되어 표시해야 한다. (직접 해보니 공백 ? 상관 없는 거 같은데 ...)
오버로딩 제약 사항
- 전혀 새로운 연산자를 정의할 수 없다. (원래 있던 연산자)
- 기본 타입을 다루는 연산자의 의미는 재정의할 수 없으며, 따라서 오버로딩된 연산자의 피연산자 중 하나는 반드시 사용자 정의 타입이어야 한다.
- 오버로딩된 연산자는 기본 타입을 다루는 경우에 적용되는 피연산자의 수, 우선순위 및 그룹화를 준수해야 한다.
- 오버로딩된 연산자는 디폴트 인수를 사용할 수 없다.
참고 사이트 : C++ 연산자 오버로딩 : 네이버 블로그 (naver.com)
참고 사이트 : [C++] operator overloading(연산자 오버로딩) (tistory.com)
C++ 연산자 오버로딩
함수의 오버로딩이란 같은 이름의 함수를 다른 역할로 쓸 수 있도록 이름의 중복을 허용한다는 의미였다. ...
blog.naver.com
#include <iostream>
using namespace std;
class Numbers {
private:
  int num1, num2;
public:
  // 기본 생성자
  Numbers() { ; }
  // 생성자
  Numbers(int num1, int num2) : num1(num1), num2(num2) { ; }
  void ShowNumbers() { // 객체 정보를 확인하는 메소드
    cout << "num1 : " << num1 << ", num2 : " << num2 << endl;
  }
  int operator + (int num) {
    return num2 + num;
  }
  Numbers operator + (Numbers ref)  {
    int num1;
    int num2;
    num1 = this->num1 + ref.num1;
    num2 = this->num2 + ref.num2;
    Numbers ob(num1, num2);
    return ob;
  }
  // 비교 연산자
  bool operator < (Numbers ref)  {
    return (num1 + num2) < (ref.num1 + ref.num2);
  }
  // 비교 연산자
  bool operator > (Numbers ref) {
    return (num1 + num2) > (ref.num1 + ref.num2);
  }
  // == 를 구현해보자 [실습]
  // 객체와 정수를 비교해주는 친구로 오버로딩 하자!
  // 해당 객체의 두 번째 멤버변수와 매개변수로 넘어온 정수가 같다면 
  // true 리턴, 아니면 false 리턴
  bool operator == (int num) {
    return num2 == num;
  }
  // += 연산자 재정의
  void operator += (int data) {
    num1 += data;
    num2 += data;
  }
  // 전위형
  Numbers operator++ () {
    ++num1;
    ++num2;
    return *this;
  }
  // 후위형
  Numbers operator++ (int temp) { // 전위형과 후위형을 구분하기 위해 매개변수를 하나 작성
    Numbers Temp = *this;
    num1++;
    num2++;
    return Temp;
  }
};
int main() {
  Numbers ob1(4, 9);
  // 피연산자 형식이 Numbers + int 라 안됨 
  // 따로 만들어줘야한다.
  cout << ob1 + 5 << endl;
  Numbers ob2(1, 3);
  Numbers ob3 = ob1 + ob2;
  ob3.ShowNumbers(); 
  bool result1 = ob1 < ob2;
  cout << result1 << endl; // 출력 0
  bool result2 = ob1 > ob2;
  cout << result2 << endl; // 출력 1
  if (ob1 < ob2) {
    cout << "ob2 객체의 변수들의 합이 더 큽니다." << endl;
  }
  else {
    cout << "ob1 객체의 변수들의 합이 더 큽니다." << endl;
  }
  Numbers ob4(6, 9);
  if (ob4 == 5) {
    cout << "ob4 객체의 num2 변수와 값이 같습니다." << endl;
  }
  else {
    cout << "ob4 객체의 num2 변수와 값이 같지 않습니다." << endl;
  }
  ob1.ShowNumbers();
  ob1 += 7;
  ob1.ShowNumbers();
  ob3 = ++ob2;
  ob3.ShowNumbers();
  int num = 5;
  cout << num++ << endl;
  ob3 = ob2++;
  ob3.ShowNumbers();
  ob2.ShowNumbers();
  return 0;
}

증감 연산자 (전위형, 후위형)
| 전위형 | 후위형 | |
| 파라미터 | void(없음) | int | 
| 리턴값 | 객체 자체 | 임시 객체 | 
| 속도 | 빠름 | 느림 | 
'C++언어 공부 > 개념 공부' 카테고리의 다른 글
| 2024.02.05 C++ 언어 공부 9일 차 (template (1)) (0) | 2024.02.08 | 
|---|---|
| 2024.02.02 C++ 언어 공부 8일 차 (exception) (0) | 2024.02.08 | 
| 2024.02.02 C++ 언어 공부 8일 차 (프렌드 추가내용) (1) | 2024.02.05 | 
| 2024.02.01 C++ 언어 공부 7일 차 (프렌드) (0) | 2024.02.02 | 
| 2024.02.01 C++ 언어 (인터페이스, 상속 실습) (0) | 2024.02.02 |