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 acompañan a caracteres que siempre había considerado 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 línea, 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 encuentra el patrón adecuado.
Es tentador convertirse en un super-entusiasta de la sobrecarga de operadores. Es un juguete divertido, al principio. Pero recuerde que es sólo azúcar 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 que el código que usa su clase sea más fácil de escribir y, sobre todo, 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 comú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 todo mi código C hará cosas diferentes!» Esto no es verdad. Ninguno de los operadores usados en expresiones que sólo contienen tipos de datos predefinidos puede cambiarse. Nunca podrá sobrecargar operadores de modo que
1 << 4;
se comporte de forma 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.