具有枚举类型数据的运算符的重载函数

时间:2015-11-02 15:26:41

标签: c++ enums

使用下面的枚举来实现接下来的3个运算符

enum day {
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
};
day *operator++(day &d);
day &operator--(day &d);
day const &operator--(day &d);

这是我的代码:

day *operator++ (day &d) 
{
    d = (day)(d + 1);
    return &d;
}
day &operator--(day &d)
{
    d = (day)(d - 1);
    return d;
}
day const &operator--(day &d) 
{
    d = (day)(d - 1);
    return d;
}

但是我用第3个函数得到了一个重载函数。我该如何解决?

1 个答案:

答案 0 :(得分:1)

正如@NathanOliver所说,C ++不允许程序员具有仅因返回类型而不同的重载。因此,您的第三次和最后一次重载不能与第二次重载共存。

无论如何,你也不应该写第一个重载。常见程序员使用++运算符和语法糖x = x+1(或多或少,因为前缀和后缀版本之间存在差异)。

operator++或加法返回指针真的很奇怪。它至少令人困惑,即使编译器在语法上可以接受。