自增运算符重载有关问题
自增运算符重载问题?
#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是加完了再引用
#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是加完了再引用