2015-11-02 66 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++或加法返回指針。它至少令人困惑,即使編譯器在語法上可以接受。