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 275 — #313<br />

✐<br />

10: Control de nombres<br />

La creación de nombres es una actividad fundam<strong>en</strong>tal <strong>en</strong> la programación,<br />

y cuando un proyecto empieza a crecer, el número de<br />

nombres puede llegar a ser inmanejable con facilidad.<br />

<strong>C++</strong> permite gran control sobre la creación y visibilidad de nombres, el lugar<br />

donde se almac<strong>en</strong>an y el <strong>en</strong>lazado de nombres. La palabra clave static estaba sobrecargada<br />

<strong>en</strong> C incluso antes de que la mayoría de la g<strong>en</strong>te supiera que significaba<br />

el término «sobrecargar». <strong>C++</strong> ha añadido además otro significado. El concepto subyac<strong>en</strong>te<br />

bajo todos los usos de static parece ser «algo que manti<strong>en</strong>e su posición»<br />

(como la electricidad estática), sea mant<strong>en</strong>i<strong>en</strong>do un ubicación física <strong>en</strong> la memoria o<br />

su visibilidad <strong>en</strong> un fichero.<br />

En este capítulo apr<strong>en</strong>derá cómo static controla el almac<strong>en</strong>ami<strong>en</strong>to y la visibilidad,<br />

así como una forma mejorada para controlar los nombres mediante el uso<br />

de la palabra clave de <strong>C++</strong> namespace. También descubrirá como utilizar funciones<br />

que fueron escritas y compiladas <strong>en</strong> C.<br />

10.1. Los elem<strong>en</strong>tos estáticos de C<br />

Tanto <strong>en</strong> C como <strong>en</strong> <strong>C++</strong> la palabra clave static ti<strong>en</strong>e dos significados básicos<br />

que, desafortunadam<strong>en</strong>te, a m<strong>en</strong>udo se confund<strong>en</strong>:<br />

Almac<strong>en</strong>ado una sola vez <strong>en</strong> una dirección de memoria fija. Es decir, el objeto<br />

se crea <strong>en</strong> una área de datos estática especial <strong>en</strong> lugar de <strong>en</strong> la pila cada vez<br />

que se llama a una función. Éste es el concepto de almac<strong>en</strong>ami<strong>en</strong>to estático.<br />

Local a una unidad de traducción particular (y también local para el ámbito de<br />

una clase <strong>en</strong> <strong>C++</strong>, tal como se verá después). Aquí, static controla la visibilidad<br />

de un nombre, de forma que dicho nombre no puede ser visto fuera del<br />

la unidad de traducción o la clase. Esto también corresponde al concepto de<br />

<strong>en</strong>lazado, que determina qué nombres verá el <strong>en</strong>lazador.<br />

En esta sección se van a analizar los significados anteriores de static tal y como<br />

se heredaron de C.<br />

10.1.1. Variables estáticas d<strong>en</strong>tro de funciones<br />

Cuando se crea una variable local d<strong>en</strong>tro de una función, el compilador reserva<br />

espacio para esa variable cada vez que se llama a la función movi<strong>en</strong>do hacia abajo el<br />

puntero de pila tanto como sea preciso. Si existe un inicializador para la variable, la<br />

inicialización se realiza cada vez que se pasa por ese punto de la secu<strong>en</strong>cia.<br />

275<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!