重载operator = for double

时间:2014-04-30 18:55:39

标签: c++ operator-overloading

是否可以重载= double类型的运算符?

我有以下内容:

double operator=(double a, Length b) {
    return a = (b.getInches()/12+b.getFeet())*3.2808*0.9144;
}

它会抛出以下错误:

'double operator=(double, Length)' must be a nonstatic member function

我做错了什么?

2 个答案:

答案 0 :(得分:7)

您不能为基本类型重写赋值运算符,但是您可以提供将Length转换为double的运算符,从而为您提供所需的效果:

class Length {
    ...
public:
    operator double() {
        return (getInches()/12+getFeet())*3.2808*0.9144;
    }
};

main() {
    Length len = ...;
    ...
    double d = len;
}

请注意,只有在读者完全清楚转换时才应进行此转换。例如,在这种情况下,您应该创建一个get_yard成员函数,如下所示:

class Length {
    ...
public:
    double get_yards() {
        return (getInches()+12*getFeet())/ 36.0;
    }
};

请注意,您不需要将英尺转换为米,然后转换为码 - 您可以直接从英尺到码;转换因子为3.0。您也可以最后进行除法 - 请参阅上面的修改后的表达式。

答案 1 :(得分:4)

您不能为double之类的内置(整数或浮点)类型重载运算符,也不能对任何类型的=运算符进行全局重载。 =运算符只能作为类成员函数重载。

另请参阅:Can I define an operator overload that works with built-in / intrinsic / primitive types?