Sobrecarga de operadores binarios: ejemplo
§1 Sinopsis
El ejemplo muestra un posible diseño de la clase Vector, diseñada para representar los vectores en un espacio de dos dimensiones, a la que se le han sobrecargado los operadores de asignación y relacionales, a fin de conseguir un álgebra lo más parecida posible a la utilizada con los vectores en los textos de física elemental.
class Vector { // Una clase Vector
public:
float x, y;
Vector& operator= (const Vector& v) { // operador de asignación
x = v.x; y = v.y;
return *this;
}
bool operator== (Vector& v) { // operador de igualdad ==
return ((v.x == x) && (v.y == y))? true: false;
}
bool operator!= (Vector& v) { // operador de desigualdad !=
return !(*this == v);
}
bool operator> (Vector& v) { // operador mayor-que
return ((x * x + y * y) > (v.x * v.x + v.y * v.y))? true: false;
}
bool operator< (Vector& v) { // operador menor-que
return ((x * x + y * y) < (v.x * v.x + v.y * v.y))? true: false;
}
bool operator>= (Vector& v) { // operador igual-o-mayor-que
return ((x * x + y * y) >= (v.x * v.x + v.y * v.y))? true: false;
}
bool operator<= (Vector& v) { // operador igual-o-menor-que
return ((x * x + y * y) <= (v.x * v.x + v.y * v.y))? true: false;
}
Vector(int i = 0, int j = 0) { // constructor por defecto
x = i; y = j;
}
Vector(const Vector& v) { // constructor-copia
x = v.x; y = v.y;
}
};
Comentario
El ejemplo es el resultado de un diseño básico, que incluye solo el operador de asignación = ( 4.9.18a), al que se han añadido los operaciones relacionales ( 4.9.18b1).
Observe que, dado que son pequeñas, todas las funciones se han declarado inline ( 4.11.2a). Es decir, pertenecientes a la clase y definidas dentro del cuerpo de esta.