프로그래밍/C++

[C++] 연산자 재정의 주의 사항

갓똥 2019. 12. 14. 15:00
728x90
반응형

1. 연산자 재정의 문법 주의 사항

int operator+(int a, int b) {
    return a - b;
}
// 3 + 2 ?

Point operator+(const Point& p, int n) {
    // ...
}

// Point operator+(const Point& p, int n, double d) - error

// Point operator+(const Point& p, int n = 10) 
//     Point p2 = p1 + ;                        - error

Point p1;
Point p2 = p1 + 1;

  ① 인자가 모두 primitive 타입인 경우는 오버로딩 할 수 없다.

    => 만약 위와 같이 코드를 짜고 3+2를 하면 1이 나오게 된다?

 

  ② 다음의 연산자는 오버로딩 할 수 없다.

    .*   ::   ?:   sizeof   typeid

    static_cast   dynamic_cast   reinterpret_cast   const_cast

    . : C++20부터 오버로딩 가능

 

  ③ 멤버 함수로만 오버로딩 가능한 연산자 : =, (), [], ->

 

  ④ 새로운 연산자를 만들거나, 인자의 개수를 변경하거나, 연산자 우선순위를 변경할 수 없다.

 

  ⑤ 디폴트 파라미터를 사용할 수 없다.

 

  ⑥ 연산자 재정의에서 중요한 연산자들

    <<, ++, [], (), ->, =

728x90
반응형