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 373 — #411<br />

✐<br />

12.7. Resum<strong>en</strong><br />

Así que, para la relativam<strong>en</strong>te inocua expresión:<br />

Fee fee = fo;<br />

se invoca el operador de conversión automático de tipo, y se crea un constructor<br />

de copia.<br />

Use la conversión automática de tipos con precaución. Como con toda la sobrecarga<br />

de operadores, es excel<strong>en</strong>te cuando reduce la tarea de codificación significativam<strong>en</strong>te,<br />

pero no vale la p<strong>en</strong>a usarla de forma gratuita.<br />

12.7. Resum<strong>en</strong><br />

El motivo de la exist<strong>en</strong>cia de la sobrecarga de operadores es para aquellas situaciones<br />

<strong>en</strong> la que la vida. No hay nada particularm<strong>en</strong>te mágico <strong>en</strong> ello; los operadores<br />

sobrecargados son solo funciones con nombres divertidos, y el compilador realiza las<br />

invocaciones a esas funciones cuando aparece el patrón adecuado. Pero si la sobrecarga<br />

de operadores no proporciona un b<strong>en</strong>eficio significativo el creador de la clase<br />

o para el usuario de la clase, no complique el asunto añadiéndolos.<br />

12.8. Ejercicios<br />

Las soluciones a los ejercicios se pued<strong>en</strong> <strong>en</strong>contrar <strong>en</strong> el docum<strong>en</strong>to electrónico<br />

titulado «The Thinking in <strong>C++</strong> Annotated Solution Guide», disponible por poco<br />

dinero <strong>en</strong> www.BruceEckel.com.<br />

1. Cree una clase s<strong>en</strong>cilla con un operador sobrecargado ++. Int<strong>en</strong>te llamar a este<br />

operador <strong>en</strong> la forma prefija y postfija y vea qué clase de advert<strong>en</strong>cia obti<strong>en</strong>e<br />

del compilador.<br />

2. Cree una clase s<strong>en</strong>cilla que cont<strong>en</strong>ga un int y sobrecargue el operador + como<br />

un método. Cree también un método print() que tome un ostream& como<br />

un argum<strong>en</strong>to y lo imprima a un ostream&. Pruebe su clase para comprobar<br />

que funciona correctam<strong>en</strong>te.<br />

3. Añada un operador binario - al ejercicio 2 como un método. Demuestre que<br />

puede usar sus objetos <strong>en</strong> expresiones complejas como a + b -c.<br />

4. Añada un operador ++ y otro -- al ejercicio 2, ambos con las versiones prefijas<br />

y postfijas, tales que devuelvan el objeto increm<strong>en</strong>tado o decrem<strong>en</strong>tado.<br />

Asegúrese de que la versión postfija devuelve el valor correcto.<br />

5. Modifique los operadores de increm<strong>en</strong>to y decrem<strong>en</strong>to del ejercicio 4 para que<br />

la versión prefija devuelva una refer<strong>en</strong>cia no const y la postfija devuelva un<br />

objeto const. Muestre que funcionan correctam<strong>en</strong>te y explique porqué esto se<br />

puede hacer <strong>en</strong> la práctica.<br />

6. Cambie la función print() del ejercicio2 para que use el operador sobrecargado<br />

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

Saved successfully!

Ooh no, something went wrong!