我想重载运算符:

static Vector operator*(float s, Vector right){
    Vector result(right.getX()*s, right.getY()*s, right.getZ()*s);
    return result;
}


当我想使用它时:

Vector a(0,1,5)
Vector v(4*a);


我有:

error: no match for 'operator*' (operand types are 'int' and 'Vector')


怎么了?

最佳答案

您需要声明(在类声明中)operator *为非静态非成员和朋友,例如:

friend Vector operator*(float s, Vector right);


并定义为(外部类声明):

Vector operator*(float s, Vector right){
    return Vector(right.getX()*s, right.getY()*s, right.getZ()*s);
}


运算符*在这里用作二进制运算符。如果您成为成员,则第一个参数隐式地作为当前对象(例如,*适用于*,如果您使用x * y,则运算符*适用于x作为成员)。但是,对于非成员,这两个参数都可以是非Vector类型,并且可以根据需要转换为Vector。
如果您成为非成员非朋友且为静态(将在类声明之外定义),这甚至可以工作

10-07 19:52
查看更多