From the article Overloading Post-Fix Forms of ++ and -- Operators, we know that the postfix form of the increment/decrement operator function takes two arguments, one is passed implicitly and the other as usual.
Its general form is:
ret-type operator++(int);
As we know that when we overload operators as friends, all the operands (arguments) are passed explicitly.
So, the general form for overloading postfix form of increment/decrement operators using friend functions should be (and it really is) like this:
ret-type operator++(class-name&, int);
Where the second int(eger) argument, as you know is a dummy variable and has
no use.
The following program illustrates this:
// Program to illustrate the overloading
// of increment / decrement operators
// as friends
// Overloads both prefix and postfix
// form
#include <iostream.h>
class myclass
{
int a;
int b;
public:
myclass(){}
myclass(int x,int y){a=x;b=y;}
void show()
{
cout<<a<<endl<<b<<endl;
}
// prefix form
friend myclass operator++(myclass&);
friend myclass operator--(myclass&);
// postfix form
friend myclass operator++(myclass&, int);
friend myclass operator--(myclass&, int);
};
// ---- PREFIX FORM ----
myclass operator++(myclass &ob)
{
ob.a++;
ob.b++;
return ob;
}
myclass operator--(myclass &ob)
{
ob.a--;
ob.b--;
return ob;
}
// ---- PREFIX FORM ENDS ----
// ---- POSTFIX FORM ----
myclass operator++(myclass &ob, int x)
{
myclass temp;
temp=ob;
ob.a++;
ob.b++;
return temp;
}
myclass operator--(myclass &ob, int x)
{
myclass temp;
temp=ob;
ob.a--;
ob.b--;
return temp;
}
// ---- POSTFIX FORM ENDS ----
void main()
{
myclass a(10,20);
myclass b(100,200);
++a;
(b++).show();
b.show();
a.show();
b.show();
a=b++;
a.show();
b.show();
}
Related Articles: