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 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 />

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

Saved successfully!

Ooh no, something went wrong!