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