#include <iostream>
using namespace std;

class Digit
{
private:
    int m_digit;
public:
    Digit(int digit = 0) : m_digit(digit) {}
    
    //prefix
    Digit & operator ++ ()
    {
        ++m_digit;
        
        return *this; // dereferencing this
    }
    // postfix -> parameter에 dummy로 하나 들어가면 postfix
    // postfix는 return을 해준 다음에 값을 바꿔줘야함.
    Digit operator ++ (int)
    {
        Digit temp(m_digit);
        ++(*this);
        
        return temp;
        
    }
    
    friend std::ostream& operator << (std::ostream &out, const Digit &d)
    {
        out << Digit.m_digit;
        return out;
    }
    
};

int main()
{
    Digit d(5);
    
    cout << ++d << "\n"; // 6
    cout << d++ << "\n"; // 6
    cout << d << "\n"; // 7
    
    return 0;

}