1. 区别于函数重载,运算符重载有一下限制:
- 只能对C++现有运算符进行重载
- 不能改变参加运算的操作数的个数
- 不能改变运算符原有的优先级和结合性
2. C++中大多数运算符都可以重载,但以下运算符不允许重载:
- 成员运算符 : "."
- 作用域限定符 : "::"
- 条件运算 : "?:"
- 计算占用内存 : "sizeof()"
例子:采用成员函数的形式重载单目运算符"++"
#include <iostream>
using namespace std;
class Counter
{
public:
Counter() { value = 0; }
Counter operator++ (); //前缀运算符
Counter operator++ (int); //后缀运算符
void Display()
{
cout<<"value = "<<value<<endl;
}
private:
int value;
};
Counter Counter::operator++()
{
++value;
return *this; //前缀运算变量值与返回值的值均+1
}
Counter Counter::operator ++(int i) //参数i没有使用,只是用来区别前缀运算符
{
Counter temp;
temp.value = value++;
return temp; //后缀运算变量值+1,返回值不变
}
int main()
{
Counter obj1,obj2;
obj2 = obj1++; //相当于obj1.operator++(0)
obj1.Display();
obj2.Display();
obj2 = ++obj1; //相当于obj1.operator++()
obj1.Display();
obj2.Display();
return 0;
}
程序运行显示结果: