枚举增量的运算符重载

时间:2017-08-09 02:32:38

标签: c++ operator-overloading

我有这个枚举,我只想在一个地方增加该枚举的对象。

enum Month {
    january = 1,
    february,
    march,
    april,
    may,
    june,
    july,
    august,
    september,
    october,
    november,
    december
};

使用我的枚举对象Month m,我只想将对象的变量移动一个位置。

Month operator++(Month &m) {
        m = static_cast<Month>(m + 1);
        return m;
    }

以Month&amp; m为参数,我得到错误,需要将int作为参数。所以,如果我做“(月&amp; m,int)”,它说它“必须采取零或一个参数”。我知道如果你的运算符重载是一个成员函数,你不需要Month&amp; m,所以我删除了它。之后,我又得到了另一个错误:“不匹配'operator ++'(操作数类型是'月')”。有什么我想念的吗?

主要代码:

class Date {
    int y, d, month_end; // private
    Month m;

    public:
        Date(int yy, Month mm, int dd) 
        : y(yy), d(dd), m(mm) { 
        }

        Month& operator++(Month &m) { 
            m = static_cast<Month>(m + 1);
            return m;
        }

        void add_month() {
            ++m;
        }

1 个答案:

答案 0 :(得分:1)

在评论中,你说:

  

我有什么东西可以俯视吗? http://ideone.com/uOkSk0

是。您正在一个不寻常的地方定义函数 - 在Date的定义内。它需要是非成员函数。

使用namespace std;

enum Month {
   january = 1,
   february,
   march,
   april,
   may,
   june,
   july,
   august,
   september,
   october,
   november,
   december
};

Month& operator++(Month &m) {
   m = static_cast<Month>(m + 1);
   return m;
}

class Date {
   int y, d;
   Month m;

   public:
   Date(int yy, Month mm, int dd) // constructor
      : y(yy), d(dd), m(mm) { // member initializer
      }


   void add_month() {
      ++m;
   }
};

int main()
{
   Month m = january;
   ++m;