Tabla de contenidos
La sobrecarga de operadores es solamente «azúcar sintáctico», lo que significa que es simplemente otra manera de invocar funciones.
La diferencia es que los argumentos para estas funciones no aparecen entre paréntesis, sino que rodean o siguen a los caracteres que siempre pensó como operadores inalterables.
Hay dos diferencias entre el uso de un operador y el de una llamada a función
normal. La sintaxis es diferente: un operador es a menudo «llamado»
situándolo entre (o después de) los argumentos. La segunda diferencia es que el
compilador determina qué «función» llamar. Por ejemplo, si está usando el
operador +
con argumentos de punto flotante, el compilador
«llama» a la función para realizar una suma de punto flotante (esta
«llamada» normalmente consiste en insertar código en linea, o una
instrucción de punto flotante del procesador). Si usa el operador +
con
un número de punto flotante y un entero, el compilador «llama» a una
función especial para convertir el int
a un float
,y entonces
«llama» a la función de suma en punto flotante.
Sin embargo, en C++ es posible definir nuevos operadores que trabajen con clases. Esta
definición es exactamente como la definición de una función ordinaria, excepto que el
nombre de la función consiste en la palabra reservada operator
seguida del
operador. Siendo esta la única diferencia, el operador se convierte en una función
como otra cualquiera que el compilador llama cuando ve el prototipo adecuado.
Es tentador convertirse en un super-entusiasta de la sobrecarga de operadores. Son un juguete divertido, al principio. Pero recuerde que es sólo un endulzamiento sintáctico, otra manera de llamar a una función. Mirándolo desde esa perspectiva, no hay razón para sobrecargar un operador excepto si eso hace al código implicado con la clase más sencillo e intuitivo de escribir y especialmente de leer. (Recuerde, el código se lee mucho más que se escribe). Si éste no es el caso no se moleste.
Otra reacción cmún frente al uso de la sobrecarga de operadores es el pánico: de repente, los operadores de C pierden su significado familiar.«¡Todo ha cambiado y mi código C por completo hará cosas diferentes!». Esto no es verdad. Todos los operadores usados en expresiones que contienen solo tipos de datos incorporados no pueden ser cambiados. Nunca podrá sobrecargar operadores así:
1 << 4;
para que se comporten de forman diferente, o que
1.414 << 2;
tenga significado. Sólo una expresión que contenga tipos de datos definidos por el usuario podrá tener operadores sobrecargados.