乘法运算符重载
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;
我正在实现一个 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;