【问题标题】:Overload function of operator with enum type data枚举类型数据的运算符重载函数
【发布时间】:2015-11-02 15:26:41
【问题描述】:

使用下面的枚举来实现接下来的 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;
}

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

【问题讨论】:

  • 最后一个operator 的目的是什么?
  • operator++ 返回一个指针实际上没有意义。
  • @Gread.And.Powerful.Oz 不,它是一个指针。
  • 我不确定星期六+1 和星期日-1 是否会按预期工作,除非您在此处使用模数...

标签: c++ enums


【解决方案1】:

正如@NathanOliver 所说,C++ 不允许程序员拥有仅根据返回类型不同的重载。因此,您的第三个也是最后一个重载不能与第二个重载共存。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多