递增运算符( ++ )和递减运算符( – )是 C++ 语言中两个重要的一元运算符。
下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( – )。
#include <iostream>
using namespace std;class Time
{private:int hours; // 0 到 23int minutes; // 0 到 59public:// 所需的构造函数Time(){hours = 0;minutes = 0;}Time(int h, int m){hours = h;minutes = m;}// 显示时间的方法void displayTime(){cout << "H: " << hours << " M:" << minutes <<endl;}// 重载前缀递增运算符( ++ )Time operator++ () {++minutes; // 对象加 1if(minutes >= 60) {++hours;minutes -= 60;}return Time(hours, minutes);}// 重载后缀递增运算符( ++ )Time operator++( int ) {// 保存原始值Time T(hours, minutes);// 对象加 1++minutes; if(minutes >= 60){++hours;minutes -= 60;}// 返回旧的原始值return T; }
};
int main()
{Time T1(11, 59), T2(10,40);++T1; // T1 加 1T1.displayTime(); // 显示 T1++T1; // T1 再加 1T1.displayTime(); // 显示 T1T2++; // T2 加 1T2.displayTime(); // 显示 T2T2++; // T2 再加 1T2.displayTime(); // 显示 T2return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
H: 12 M:0
H: 12 M:1
H: 10 M:41
H: 10 M:42
注意,int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。
前缀形式重载调用 Check operator ++ () ,后缀形式重载调用 operator ++ (int)。
实例 (++ 重载)
#include <iostream>
using namespace std;class Check
{private:int i;public:Check(): i(0) { }Check operator ++ (){Check temp;temp.i = ++i;return temp;}// 括号中插入 int 表示后缀Check operator ++ (int){Check temp;temp.i = i++;return temp;}void Display(){ cout << "i = "<< i <<endl; }
};int main()
{Check obj, obj1; obj.Display(); obj1.Display();// 调用运算符函数,然后将 obj 的值赋给 obj1obj1 = ++obj;obj.Display();obj1.Display();// 将 obj 赋值给 obj1, 然后再调用运算符函数obj1 = obj++;obj.Display();obj1.Display();return 0;
}
执行输出结果为:
i = 0
i = 0
i = 1
i = 1
i = 2
i = 1
实例 (-- 重载)
#include <iostream>
using namespace std;class Check
{private:int i;public:Check(): i(3) { }Check operator -- (){Check temp;temp.i = --i;return temp;}// 括号中插入 int 表示后缀Check operator -- (int){Check temp;temp.i = i--;return temp;}void Display(){ cout << "i = "<< i <<endl; }
};int main()
{Check obj, obj1; obj.Display(); obj1.Display();// 调用运算符函数,然后将 obj 的值赋给 obj1obj1 = --obj;obj.Display();obj1.Display();// 将 obj 赋值给 obj1, 然后再调用运算符函数obj1 = obj--;obj.Display();obj1.Display();return 0;
}
执行输出结果为:
i = 3
i = 3
i = 2
i = 2
i = 1
i = 2