是否可以重载= 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
我做错了什么?
答案 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?