Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐