#include <iostream>
using namespace std;

class A
{
        friend A& operator++ (A& a);
        friend A operator++ (A& a, int);
public:
        operator int() { return a_; }
        A& operator = (int a) { a_ = a; return *this; }
private:
        int a_;
};

A& operator++ (A& a)
{
        ++a.a_;
        return a;
}

A operator++ (A& a, int)
{
        A temp = a;
        ++a.a_;
        return temp;
}

int main()
{
        A a1;
        a1 = 3;
        cout << "initial a1=" << a1 << endl;
        A a2 = ++a1;
        cout << "pre, a1=" << a1 << ", a2=" << a2 << endl;
        a2 = a1++;
        cout << "post, a1=" << a1 << ", a2=" << a2 << endl;
}

