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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 205 — #243<br />

✐<br />

7: Sobrecarga de funciones y argum<strong>en</strong>tos<br />

por defecto<br />

Una de las características más importantes <strong>en</strong> cualquier l<strong>en</strong>guaje<br />

de programación es la utilización adecuada de los nombres.<br />

Cuando crea un objeto (una variable) le está asignando un nombre a una región<br />

de memoria. Una función es un nombre para una acción. El hecho de poner nombres<br />

adecuados a la hora de describir un sistema hace que un programa sea más fácil de<br />

<strong>en</strong>t<strong>en</strong>der y modificar. Es muy parecido a la prosa escrita, el objetivo es comunicarse<br />

con los lectores.<br />

Cuando se trata de repres<strong>en</strong>tar sutilezas del l<strong>en</strong>guaje humano <strong>en</strong> un l<strong>en</strong>guaje de<br />

programación aparec<strong>en</strong> los problemas. A m<strong>en</strong>udo, la misma palabra expresa diversos<br />

significados dep<strong>en</strong>di<strong>en</strong>do del contexto. Una palabra ti<strong>en</strong>e múltiples significados,<br />

es decir, está sobrecargada (polisemia). Esto es muy útil, especialm<strong>en</strong>te cuando<br />

las difer<strong>en</strong>cias son obvias. Puede decir «lave la camiseta, lave el coche.» Sería estúpido<br />

forzar la expresión anterior para convertirla <strong>en</strong> «lavar_camiseta la camiseta,<br />

lavar_coche el coche» pues el oy<strong>en</strong>te no ti<strong>en</strong>e que hacer ninguna distinción sobre<br />

la acción realizada. Los l<strong>en</strong>guajes humanos son muy redundantes, así que incluso<br />

si pierde algunas palabras, todavía puede determinar el significado. Los id<strong>en</strong>tificadores<br />

únicos no son necesarios, pues se puede deducir el significado a partir del<br />

contexto.<br />

Sin embargo, la mayoría de los l<strong>en</strong>guajes de programación requier<strong>en</strong> que se utilice<br />

un id<strong>en</strong>tificador único para cada función. Si ti<strong>en</strong>e tres tipos difer<strong>en</strong>tes de datos<br />

que desee imprimir <strong>en</strong> la salida: int, char y float, g<strong>en</strong>eralm<strong>en</strong>te ti<strong>en</strong>e que crear tres<br />

funciones difer<strong>en</strong>tes, como por ejemplo print_int(), print_char() y print-<br />

_float(). Esto constituye un trabajo extra tanto para el programador, al escribir el<br />

programa, como para el lector que trate de <strong>en</strong>t<strong>en</strong>derlo.<br />

En <strong>C++</strong> hay otro factor que fuerza la sobrecarga de los nombres de función: el<br />

constructor. Como el nombre del constructor está predeterminado por el nombre<br />

de la clase, podría parecer que sólo puede haber un constructor. Pero, ¿qué ocurre<br />

si desea crear un objeto de difer<strong>en</strong>tes maneras Por ejemplo, suponga que escribe<br />

una clase que puede inicializarse de una manera estándar o ley<strong>en</strong>do información de<br />

un fichero. Necesita dos constructores, uno que no ti<strong>en</strong>e argum<strong>en</strong>tos (el constructor<br />

por defecto) y otro que ti<strong>en</strong>e un argum<strong>en</strong>to de tipo string, que es el nombre del<br />

fichero que inicializa el objeto. Ambos son constructores, así pues deb<strong>en</strong> t<strong>en</strong>er el<br />

mismo nombre: el nombre de la clase. Así, la sobrecarga de funciones es es<strong>en</strong>cial<br />

para permitir el mismo nombre de función (el constructor <strong>en</strong> este caso) se utilice con<br />

difer<strong>en</strong>tes argum<strong>en</strong>tos.<br />

Aunque la sobrecarga de funciones es algo imprescindible para los constructo-<br />

205<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!