乘法运算符重载

Multiplication operator overloading

我正在实现一个 class 向量并将乘法运算符定义为 class 的 成员 as

Vector operator*(const float& s);

据我了解,这意味着左操作数是Vector,右操作数是float。所以如果我尝试做这样的事情

Vector c(1,2,3);
Vector d = c * 2.0f; // Results in d = (2,4,6)

没关系,但是,在我看来,首先看到向量然后是比例因子很奇怪,所以为了 float * Vector 我定义了一个 non-member 作用为

Vector operator*(const float& s, const Vector& v)
{
    //Invalid operands to binary expression 'const Vector' and 'float'
    return v * s;
}

但是我收到了评论中的错误。我不知道我错过了什么,或者如果这不是我应该声明运算符以便以 float * Vector 方式进行缩放的方式。

请注意,您将 v 传递为 const Vector &,但您的成员 operator* 未标记为 const。所以它只能在非常量 Vector 对象上调用。这肯定不是你想要的,所以只需将成员标记为const:

Vector operator*(const float& s) const;