++运算符重载有前置和后置两种,所以要定义一个参数 int来区分前置和后置,带int参数的代表后置,然后再后置函数里面调用前置函数,这样的话就保持了和前置函数一样的自增幅度。在前置函数里面要返回对象的引用,在后置函数里面返回一个对象的拷贝,而对对象进行自增。
//单目运算符重载 ++
#include<iostream>
using namespace std;
class Fraction
{
private:
int den;
int num;
public:
Fraction(int d=1,int n=0):den(d),num(n)
{
}
//前置 prefix
Fraction& operator++()
{
num+=den;
return *this;
}
//后置 postfix 加参数int区分。
const Fraction operator ++(int)
{
Fraction old(*this); //把*this赋值给old 相当于 old=*this;这里是浅拷贝。
++(*this);
return old;
}
friend ostream &operator<<(ostream &out,const Fraction& x);
};
ostream &operator<<(ostream &out,const Fraction&x)
{
out<<x.den<<" "<<x.num<<endl;
return out;
}
int main()
{
Fraction b(1,1);
cout<<++b<<endl;
cout<<b++<<endl;
cout<<b<<endl;
cout<<++b<<endl;
cout<<"=============="<<endl;
b++;
cout<<b<<endl;
++b;
cout<<b<<endl;
return 0;
}