13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!