自增运算符++、自减运算符--有前置/后置之分,为了区分所重载的是前置运算符还是后置运算符,C++规定:
#include"iostream"
using namespace std;
class CDemo{
int n;
public:
CDemo(int i=0):n(i){}
friend CDemo &operator ++(CDemo&);
friend CDemo operator ++(CDemo&,int);
CDemo &operator --();
CDemo operator --(int);
operator int(){return n;}
};
CDemo & CDemo::operator --()
{
n--;
return *this;
}
CDemo CDemo:: operator --(int)
{
CDemo temp(*this);
n--;
return temp;
}
CDemo &operator ++(CDemo &a)
{
a.n++;
return a;
}
CDemo operator ++(CDemo&a,int)
{
CDemo temp(a);
a.n++;
return temp;
}
int main()
{
CDemo c;
cout<<(c++)<<endl;
cout<<(++c)<<endl;
return 0;
}
运算符重载的注意事项
1. C++不允许定义新的运算符 ;
2. 重载后运算符的含义应该符合日常习惯; complex_a + complex_b word_a > word_b date_b = date_a + n
3. 运算符重载不改变运算符的优先级;
4. 以下运算符不能被重载:“.”、“.*”、“::”、“?:”、sizeof;
5. 重载运算符()、[]、->或者赋值运算符=时,运算符重载函数必须声明为类的成员函数。