Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 331 — #369<br />
✐<br />
12: Sobrecarga de operadores<br />
La sobrecarga de operadores es solam<strong>en</strong>te «azúcar sintáctico», lo<br />
que significa que es simplem<strong>en</strong>te otra manera de invocar funciones.<br />
La difer<strong>en</strong>cia es que los argum<strong>en</strong>tos para estas funciones no aparec<strong>en</strong> <strong>en</strong>tre paréntesis,<br />
sino que rodean o sigu<strong>en</strong> a los caracteres que siempre p<strong>en</strong>só como operadores<br />
inalterables.<br />
Hay dos difer<strong>en</strong>cias <strong>en</strong>tre el uso de un operador y el de una llamada a función<br />
normal. La sintaxis es difer<strong>en</strong>te: un operador es a m<strong>en</strong>udo «llamado» situándolo<br />
<strong>en</strong>tre (o después de) los argum<strong>en</strong>tos. La segunda difer<strong>en</strong>cia es que el compilador<br />
determina qué «función» llamar. Por ejemplo, si está usando el operador + con argum<strong>en</strong>tos<br />
de punto flotante, el compilador «llama» a la función para realizar una<br />
suma de punto flotante (esta «llamada» normalm<strong>en</strong>te consiste <strong>en</strong> insertar código <strong>en</strong><br />
linea, o una instrucción de punto flotante del procesador). Si usa el operador + con<br />
un número de punto flotante y un <strong>en</strong>tero, el compilador «llama» a una función especial<br />
para convertir el int a un float,y <strong>en</strong>tonces «llama» a la función de suma <strong>en</strong> punto<br />
flotante.<br />
Sin embargo, <strong>en</strong> <strong>C++</strong> es posible definir nuevos operadores que trabaj<strong>en</strong> con clases.<br />
Esta definición es exactam<strong>en</strong>te como la definición de una función ordinaria, excepto<br />
que el nombre de la función consiste <strong>en</strong> la palabra reservada operator seguida<br />
del operador. Si<strong>en</strong>do esta la única difer<strong>en</strong>cia, el operador se convierte <strong>en</strong> una<br />
función como otra cualquiera que el compilador llama cuando ve el prototipo adecuado.<br />
12.1. Precaución y tranquilidad<br />
Es t<strong>en</strong>tador convertirse <strong>en</strong> un super-<strong>en</strong>tusiasta de la sobrecarga de operadores.<br />
Son un juguete divertido, al principio. Pero recuerde que es sólo un <strong>en</strong>dulzami<strong>en</strong>to<br />
sintáctico, otra manera de llamar a una función. Mirándolo desde esa perspectiva,<br />
no hay razón para sobrecargar un operador excepto si eso hace al código implicado<br />
con la clase más s<strong>en</strong>cillo e intuitivo de escribir y especialm<strong>en</strong>te de leer. (Recuerde, el<br />
código se lee mucho más que se escribe). Si éste no es el caso no se moleste.<br />
Otra reacción cmún fr<strong>en</strong>te al uso de la sobrecarga de operadores es el pánico:<br />
de rep<strong>en</strong>te, los operadores de C pierd<strong>en</strong> su significado familiar.«¡Todo ha cambiado<br />
y mi código C por completo hará cosas difer<strong>en</strong>tes!». Esto no es verdad. Todos los<br />
operadores usados <strong>en</strong> expresiones que conti<strong>en</strong><strong>en</strong> solo tipos de datos incorporados<br />
no pued<strong>en</strong> ser cambiados. Nunca podrá sobrecargar operadores así:<br />
1