++运算符重载有前置和后置两种,所以要定义一个参数 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; }