乘法运算符重载

时间:2015-04-07 13:30:05

标签: c++ operator-overloading

我正在实现一个Vector类,并将乘法运算符定义为该类的成员

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我将非成员函数定义为

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

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

1 个答案:

答案 0 :(得分:5)

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

Vector operator*(const float& s) const;