我想重载运算符:
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。
如果您成为非成员非朋友且为静态(将在类声明之外定义),这甚至可以工作