2015-11-02 67 views
0

使用以下枚举来实现未来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; 
} 

,但我得到我的一个过载功能与第三FUNC。我该如何解决它?

+2

[你不能通过单独的返回类型重载函数](http://stackoverflow.com/questions/4331837/why-cant-functions-be-overloaded-by-return-type) – NathanOliver

+1

什么是预期的目的最后一个'运营商',无论如何? – 5gon12eder

+0

从'operator ++'返回一个指针并没有什么意义。 – interjay

回答

1

正如@NathanOliver所言,C++不允许程序员拥有仅仅受返回类型影响的重载。所以你的第三次和最后一次重载不能和第二次重载。

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

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