0

如何重载接受相同数量参数但返回类型不同的减号运算符?

模板类:

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

3 回答 3

2

不,你不能。只有当参数列表不同时才能进行重载。例如:

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

现在你打电话myFun(10)。编译器无法确定调用哪个版本。

于 2013-05-15T10:00:18.260 回答
0

您不能,重载决议仅根据函数参数的类型选择重载。

于 2013-05-15T10:00:16.873 回答
0

运算符重载只是函数/方法重载的扩展。对于函数重载,函数的签名应该不同。正如您的帖子中所报道的,这两个函数的签名是相同的。

请注意,函数/方法签名不包括返回类型。

在此处阅读有关此主题的更多信息:Java - 为什么没有基于返回类型的方法重载?

于 2013-05-15T10:01:01.190 回答