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 375 — #413<br />

✐<br />

12.8. Ejercicios<br />

22. En CopyingWithPointers.cpp elimine el operador = <strong>en</strong> DogHouse y muestre<br />

que el operador = sintetizado por el compilador copia correctam<strong>en</strong>te string<br />

pero es simplem<strong>en</strong>te un alias del puntero Dog.<br />

23. En Refer<strong>en</strong>ceCounting.cpp añada un static int y un int ordinario como<br />

atributos a Dog y a DogHouse. En todos los constructores para ambas clases,<br />

increm<strong>en</strong>te el static int y asigne el resultado al int ordinario para mant<strong>en</strong>er un<br />

seguimi<strong>en</strong>to del número de objetos que están si<strong>en</strong>do creados. Haga las modificaciones<br />

necesarias para que todas las s<strong>en</strong>t<strong>en</strong>cias de impresión muestr<strong>en</strong> los<br />

id<strong>en</strong>tificadores int de los objetos involucrados.<br />

24. Cree una clase que cont<strong>en</strong>ga un string como atributo. Inicialice el string<br />

<strong>en</strong> el constructor, pero no cree un constructor de copia o un operador =.<br />

Haga una segunda clase que t<strong>en</strong>ga un atributo de su primera clase; no cree un<br />

constructor de copia o un operador = para esta clase tampoco. Demuestre que<br />

el constructor de copia y el operador = son sintetizados correctam<strong>en</strong>te por el<br />

compilador.<br />

25. Combine las clases <strong>en</strong> OverloadingUnaryOperators.cpp y <strong>en</strong> Integer.<br />

cpp.<br />

26. Modifique PointerToMemmberOperator.cpp añadi<strong>en</strong>do dos nuevas funciones<br />

miembro a Dog que no tom<strong>en</strong> argum<strong>en</strong>tos y devuelvan void. Cree y<br />

compruebe un operador sobrecargado ->* que funcione con sus dos nuevas<br />

funciones.<br />

27. Añada un operador ->* a NestedSmartPointer.cpp.<br />

28. Cree dos clases, Apple y Orange. En Apple, cree un constructor que tome<br />

una Orange como argum<strong>en</strong>to. Cree una función que tome un Apple y llame<br />

a esa función con una una Orange para demostrar que funciona. Ahora haga<br />

explícito el constructor de Apple para demostrar que así se evita la conversión<br />

automática de tipos. Modifique la llamada a su función para que la la conversión<br />

se haga explícitam<strong>en</strong>te y de ese modo, funcione.<br />

29. Añada un operador global * a ReflexivityInOverloading.cpp y demuestre<br />

que es reflexivo.<br />

30. Cree dos clases y un operador + y las funciones de conversión de tal manera<br />

que la adicción sea reflexiva para las dos clases.<br />

31. Arregle TypeConversionFanout.cpp creando una función explícita para<br />

realizar la conversión de tipo, <strong>en</strong> lugar de uno de los operadores de conversión<br />

automáticos.<br />

32. Escriba un código simple que use los operadores +, -, *, / para double. Imagine<br />

cómo el compilador g<strong>en</strong>era el codigo <strong>en</strong>samblador y mire el <strong>en</strong>samblador<br />

que se g<strong>en</strong>era <strong>en</strong> realidad para descubrir y explicar qué está ocurri<strong>en</strong>do «bajo<br />

el capó».<br />

375<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!