前置单目运算符重载规则:
- 设U为前置单目运算符,oprd为类A的对象,则U应被重载为A类的成员函数
- 方式:oprd.operator U()
后置单目运算符重载规则:
- 后置单目运算只有两个:"++"和"--"
- 很显然"++"和"--"也可以作为前置单目运算符,这样oprd.operator ++()就会歧义,到底是重置前置的"++"还是后置的"++"呢?
- 解决方法:强行传一个没有意义的int参数只是为了区分,即oprd.operator ++(int)
例子,重载时钟类实的"++"和"--":
#include<stdio.h>
class Clock
{
public:
Clock(int h=0, int m=0, int s=0): h(h), m(m), s(s) {}
void Show() { printf("%02d:%02d:%02d\n", h, m, s); }
Clock operator ++ () //前置"++"重载
{
s++;
if(s==60) m++, s = 0;
if(m==60) h++, m = 0;
if(h==24) h = 0;
return *this;
}
Clock operator ++ (int) //后置"++"重载
{
Clock old = *this;
++(*this);
return old;
}
private:
int h, m, s;
};
int main(void)
{
Clock c(23, 59, 58);
(++c).Show();
(c++).Show();
(++c).Show();
c.Show();
return 0;
}
/*
23:59:59
23:59:59
00:00:01
00:00:01
*/