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 303 — #341<br />
✐<br />
10.7. Ejercicios<br />
El uso de static d<strong>en</strong>tro de clases es un método más para controlar los nombres<br />
de un programa. Los nombres no colisionan con nombres globales, y la visibilidad y<br />
acceso se manti<strong>en</strong>e d<strong>en</strong>tro del programa, dándole un mayor control para el mant<strong>en</strong>imi<strong>en</strong>to<br />
de su código.<br />
10.7. 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 función con una variable estática que sea un puntero (con un argum<strong>en</strong>to<br />
por defecto igual cero). Cuando la función que realice la llamada proporcione<br />
un valor para ese argum<strong>en</strong>to se usará para apuntar al principio de un<br />
array de int. Si se llama a la función con el argum<strong>en</strong>to cero (utilizando el argum<strong>en</strong>to<br />
por defecto), la función devuelve el sigui<strong>en</strong>te valor del array, hasta que<br />
llegue a un valor -1 <strong>en</strong> el array (que actuará como señal de final). Experim<strong>en</strong>te<br />
con esta función <strong>en</strong> main().<br />
2. Cree una función que devuelva el sigui<strong>en</strong>te valor de una serie de Fibonacci<br />
cada vez que sea llamada. Añada un argum<strong>en</strong>to que de tipo bool con valor por<br />
defecto false tal que cuando el argum<strong>en</strong>to valga true «reinicie» la función<br />
al principio de la serie de Fibonacci. Experim<strong>en</strong>te con esta función <strong>en</strong> main().<br />
3. Cree una clase que cont<strong>en</strong>ga un array de int. Especifique la dim<strong>en</strong>sión del array<br />
utilizando static const int d<strong>en</strong>tro de la clase. Añada una variable const<br />
int e inicialícela <strong>en</strong> la lista de inicialización del constructor. Haga al constructor<br />
inline. Añada un atributo static int e inicialícelo a un valor específico.<br />
Añada un método estático que imprima el atributo estático. Añada un miembro<br />
inline llamado print() que imprima todos los valores del array y que<br />
llame al método estático. Experim<strong>en</strong>te con esta clase <strong>en</strong> main().<br />
4. Cree una clase llamada Monitor que mant<strong>en</strong>ga el registro del número de veces<br />
que ha sido llamado su método incid<strong>en</strong>t(). Añada un método print() que<br />
muestre por pantalla el número de incid<strong>en</strong>tes. Ahora cree una función global<br />
(no un método) que cont<strong>en</strong>ga un objeto estático Monitor. Cada vez que llame<br />
a la función debe llamar a incid<strong>en</strong>t(), después al método print() para<br />
sacar por pantalla el contador de incid<strong>en</strong>tes. Experim<strong>en</strong>te con la función <strong>en</strong><br />
main().<br />
5. Modifique la clase Monitor del Ejercicio 4 de forma que pueda decrem<strong>en</strong>tar<br />
(decrem<strong>en</strong>t()) el contador de incid<strong>en</strong>tes. Cree una clase llamada Monitor2<br />
que tome como argum<strong>en</strong>to del constructor un puntero a Monitor1, y que almac<strong>en</strong>e<br />
ese puntero y llame a incid<strong>en</strong>t() y print(). En el destructor para<br />
Monitor2, llame a decrem<strong>en</strong>t() y print(). Cree ahora un objeto estático<br />
de Monitor2 d<strong>en</strong>tro de una función. D<strong>en</strong>tro de main(), experim<strong>en</strong>te llamando<br />
y no llamando a la función para ver qué pasa con el destructor de Monitor2.<br />
6. Cree un objeto global de clase Monitor2 y vea qué sucede.<br />
7. Cree una clase con un destructor que imprima un m<strong>en</strong>saje y después llame a<br />
exit(). Cree un objeto global de esa clase y vea qué pasa.<br />
303<br />
✐<br />
✐<br />
✐<br />
✐