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 48 — #86<br />

✐<br />

Capítulo 2. Construir y usar objetos<br />

<strong>en</strong>vía la cad<strong>en</strong>a «howdy!» al objeto llamado cout (que es un diminutivo de «console<br />

output» (salida por consola).<br />

De mom<strong>en</strong>to ya hemos visto sufici<strong>en</strong>te sobrecarga de operadores como para poder<br />

empezar. El Capítulo 12 cubre la sobrecarga de operadores con detalle.<br />

2.3.2. Espacios de nombres<br />

Como se m<strong>en</strong>ciona <strong>en</strong> el Capítulo 1, uno de los problemas del l<strong>en</strong>guaje C es que<br />

«nos quedamos sin nombres» para funciones e id<strong>en</strong>tificadores cuando los programas<br />

llegan a ser de cierto tamaño. Por supuesto que realm<strong>en</strong>te no nos quedamos<br />

sin nombres; aunque se hace más difícil p<strong>en</strong>sar <strong>en</strong> nombres nuevos después de un<br />

rato. Y todavía más importante, cuando un programa alcanza cierto tamaño es normal<br />

fragm<strong>en</strong>tarlo <strong>en</strong> trozos más pequeños cada uno de los cuales es mant<strong>en</strong>ido por<br />

difer<strong>en</strong>tes personas o grupos. Como C sólo ti<strong>en</strong>e un ruedo para lidiar con todos los<br />

id<strong>en</strong>tificadores y nombres de función, trae como consecu<strong>en</strong>cia que todos los desarrolladores<br />

deb<strong>en</strong> t<strong>en</strong>er cuidado de no usar accid<strong>en</strong>talm<strong>en</strong>te los mismos nombres <strong>en</strong><br />

situaciones <strong>en</strong> las que pued<strong>en</strong> ponerse <strong>en</strong> conflicto. Esto se convierte <strong>en</strong> una pérdida<br />

de tiempo, se hace tedioso y <strong>en</strong> último término, es más caro.<br />

El <strong>C++</strong> Estándar ti<strong>en</strong>e un mecanismo para impedir estas colisiones: la palabra<br />

reservada namespace (espacio de nombres). Cada conjunto de definiciones de una<br />

librería o programa se «<strong>en</strong>vuelve» <strong>en</strong> un espacio de nombres, y si otra definición<br />

ti<strong>en</strong>e el mismo nombre, pero está <strong>en</strong> otro espacio de nombres, <strong>en</strong>tonces no se produce<br />

colisión.<br />

El espacio de nombres es una herrami<strong>en</strong>ta útil y conv<strong>en</strong>i<strong>en</strong>te, pero su pres<strong>en</strong>cia<br />

implica que debe saber usarla antes de escribir un programa. Si simplem<strong>en</strong>te<br />

escribe un fichero de cabecera y usa algunas funciones u objetos de esa cabecera,<br />

probablem<strong>en</strong>te reciba extraños m<strong>en</strong>sajes cuando compile el programa, debido a que<br />

el compilador no pueda <strong>en</strong>contrar las declaraciones de los elem<strong>en</strong>tos del fichero de<br />

cabecera. Después de ver este m<strong>en</strong>saje un par de veces se le hará familiar su significado<br />

(que es: Usted ha incluido el fichero de cabecera pero todas las declaraciones están<br />

sin un espacio de nombres y no le dijo al compilador que quería usar las declaraciones <strong>en</strong> ese<br />

espacio de nombres).<br />

Hay una palabra reservada que le permite decir «quiero usar las declaraciones<br />

y/o definiciones de este espacio de nombres». Esa palabra reservada, bastante apropiada<br />

por cierto, es using. Todas las librerías de <strong>C++</strong> Estándar están incluidas <strong>en</strong><br />

un único espacio de nombres, que es std (por «standard»). Como este libro usa la<br />

librería estándar casi exclusivam<strong>en</strong>te, verá la sigui<strong>en</strong>te directiva using <strong>en</strong> casi todos<br />

los programas.<br />

using namespace std;<br />

Esto significa que quiere usar todos los elem<strong>en</strong>tos del espacio de nombres llamado<br />

std. Después de esta s<strong>en</strong>t<strong>en</strong>cia, ya no hay que preocuparse de si su compon<strong>en</strong>te<br />

o librería particular pert<strong>en</strong>ece a un espacio de nombres, porque la directiva using<br />

hace que el espacio de nombres esté disponible para todo el fichero donde se escribió<br />

la directiva using.<br />

Exponer todos los elem<strong>en</strong>tos de un espacio de nombres después de que algui<strong>en</strong><br />

se ha molestado <strong>en</strong> ocultarlos, parece contraproduc<strong>en</strong>te, y de hecho, el lector deberá<br />

t<strong>en</strong>er cuidado si considera hacerlo (como apr<strong>en</strong>derá más tarde <strong>en</strong> este libro). Sin<br />

48<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!