自增运算符重载有关问题

自增运算符重载问题?
#include   <iostream.h>

class   increase
{
private:
int   value;
public:
increase(int);
friend   increase   &   operator   ++   (increase   &);
friend   increase   operator   ++   (increase   &,   int);
void   display();
};
increase::increase(int   x)
{
value   =   x;
}
increase   &   operator   ++   (increase   &   a)
{
a.value++;
return   a;
}
increase   operator   ++   (increase   &   a,   int)
{
increase   temp(a);
a.value++;
return   temp;
}
void   increase::display()
{
cout   < <   "the   value   is   "   < <   value   < <   endl;
}

void   main()
{
increase   n(20);
n.display();
(n++).display();
n.display();
++n;
n.display();
++(++n);
n.display();
(n++)++;
n.display();
}
=====================
依次显示:
20
20
21
22
24
25
=================
不过我就是理解不通:
(n++).display()显示20,而原先我的理解应是21
(n++)++
n.display()显示25,而原先我的理解应是26。  
==================
请大家帮助理解下。

------解决方案--------------------
increase n(20);
n.display();//20
(n++).display();//此时n开始是20,等这句运行完了,n才为21.所以显示20
n.display();//21
++n;
n.display();//22
++(++n);
n.display();//24
(n++)++;
n.display();同上面的道理,这就是n++和++n的区别


n++是先引用然后再加
++n是加完了再引用