C++/Overloading 2021. 3. 16. 00:25

증감 연산자 오버로딩 (Increment and Decrement Operator Overloading)

  • ++ 연산자 오버로딩 예제

    • 전위(prefix), 후위(postfix)에 따라 오버로딩 방식이 다르다.

      • 클래스 내에서 정의하는 연산자 오버로딩은 파라미터를 받지 않으면 단항 연산자처럼 앞에 붙는 방식으로 오버로딩된다. (전위)

      • 따라서 후위 연산자를 오버로딩하려면 int 자료형의 더미 변수가 있어야 한다.

      #include <iostream>
      
      class Digit
      {
        int    digit_;
      
      public:
        Digit(const int& digit) { digit_ = digit; }
      
        // prefix
        Digit& operator ++ ()
        {
          ++digit_;
          return (*this);
        }
      
        // postfix
        Digit operator ++ (int)
        {
          Digit temp(digit_);
          ++(*this);
          return (temp);
        }
      
        friend std::ostream& operator << (std::ostream& out, const Digit& d)
        {
          out << d.digit_;
          return (out);
        }
      };
      
      int        main()
      {
        using namespace std;
      
        Digit    d(5);
      
        cout << d << endl;
        cout << ++d << endl;
        cout << d++ << endl;
        cout << d << endl;
      }
      
      /* stdout
      5
      6
      6
      7
      */
      • int 대신 다른 자료형으로 바꿔보면 다음과 같은 오류가 발생한다.

        error C2807: the second formal parameter to postfix 'operator ++' must be 'int'