2013-05-15 97 views
0

如何重載minus運算符接受相同數量的參數但具有不同的返回類型?運算符超載(相同參數,不同返回類型)

模板類:

template <typename T> 
T minus (T x, T y) { 
    return (x - y); 
} 

template <typename T> 
double absMinus (T x, T y) { 
    double sd = abs(x - y); 
    return sd; 
} 

運算符重載類:

Minus operator-(Minus &p, Minus &q) { 
    return (p.something - q.something); 
} 

double operator-(Minus &p, Minus &q) { 
    return (p.something() - q.something()); 
} 

當我試圖編譯,它給了我下面的錯誤:

Minus.h:25: error: new declaration ‘double operator-(Minus&, Minus&)’ 
Minus.h:24: error: ambiguates old declaration ‘Minus operator-(Minus&, Minus&)’ 
+4

你不能只返回類型重載函數。 –

+0

假設你有'Minus p,x;'。 **你期望'p-x;'返回什麼?你不要把結果賦給任何東西,只要寫'p-x;'。 –

+0

注意:您應該使用這種操作符返回一個const或對const的引用。否則,你將能夠寫出愚蠢的語句,如'(a - b)= c;' – JBL

回答

2

不,你不能。僅當參數列表不同時才能完成重載。例如:

int myFun(int); 
double myFun(int); 

現在您致電myFun(10)。編譯器無法確定要調用哪個版本。

0

你不能,重載解析僅根據功能參數的類型選擇過載。

0

運算符重載只是函數/方法重載的擴展。對於函數重載,函數的簽名應該不同。正如你的文章所報道的,這兩個函數的簽名是相同的。

請注意函數/方法簽名不包括返回類型。

閱讀更多關於這一主題在這裏:Java - why no return type based method overloading?

相關問題