Overloading arithmetic operators and commutativity
I've been doing work with 3D vectors, and so I decided to overload the +,-, and * operators to make basic algebra operations more intuitive to program with. I've succeeded with accurate results but I have a question about overloading * to denote multipliying a vector by a scalar. Precedence and associativity work for multiplication by a scalar, as they do for the regular * operator.
Code:
class Vect{
private:
public:
unsigned dimension;
float x;
float y;
float z;
};
Vect operator*(float scalar, Vect the_vect){
int i=0;
Vect scalar_product;
scalar_product.x = scalar*(the_vect.x);
scalar_product.y = scalar*(the_vect.y);
scalar_product.z = scalar*(the_vect.z);
return scalar_product;
}
Vect operator*( Vect the_vect, float scalar){
int i=0;
Vect scalar_product;
scalar_product.x = scalar*(the_vect.x);
scalar_product.y = scalar*(the_vect.y);
scalar_product.z = scalar*(the_vect.z);
return scalar_product;
}
The nearly identical declaration, aside from order of the arguments was the only way I could figure out to allow me type either:
Code:
vect1 = 7.15*vect1;
OR
Code:
vect1 = vect1*7.15;
Is there another way to overload the * operator once and to request it to disregard the order of the arguments? This didn't come up with + or - because the arguments for those were both of type Vect, whereas here I've got a float and my Vect type.
Any thoughts?