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 287 — #325<br />

✐<br />

10.3. Miembros estáticos <strong>en</strong> <strong>C++</strong><br />

del espacio):<br />

//: C10:UsingDeclaration2.cpp<br />

#include "UsingDeclaration.h"<br />

namespace Q {<br />

using U::f;<br />

using V::g;<br />

// ...<br />

}<br />

void m() {<br />

using namespace Q;<br />

f(); // Calls U::f();<br />

g(); // Calls V::g();<br />

}<br />

int main() {} ///:~<br />

Una declaración using es un alias. Le permite declarar la misma función <strong>en</strong> espacios<br />

de nombres difer<strong>en</strong>tes. Si acaba redeclarando la misma función importando<br />

difer<strong>en</strong>tes espacios de nombres no hay problema, no habrá ambigüedades o duplicados.<br />

10.2.3. El uso de los espacios de nombres<br />

Algunas de las reglas de arriba pued<strong>en</strong> parecer un poco desal<strong>en</strong>tadoras al principio,<br />

especialm<strong>en</strong>te si ti<strong>en</strong>e la impresión que las utilizará constantem<strong>en</strong>te. No obstante,<br />

<strong>en</strong> g<strong>en</strong>eral es posible salir airoso con el uso de espacios de nombres fácilm<strong>en</strong>te<br />

siempre y cuando compr<strong>en</strong>da como funcionan. La clave a recordar es que cuando introduce<br />

una directiva using global (vía "using namespace" fuera de cualquier rango)<br />

usted ha abierto el espacio de nombres para ese archivo. Esto suele estar bi<strong>en</strong><br />

para un archivo de implem<strong>en</strong>tación (un archivo "cpp") porque la directiva using<br />

sólo afecta hasta el final de la compilación de dicho archivo. Es decir, no afecta a ningún<br />

otro archivo, de forma que puede ajustar el control de los espacios de nombres<br />

archivo por archivo. Por ejemplo, si usted descubre un cruce de nombres debido a<br />

que hay demasiadas directivas using <strong>en</strong> un archivo de implem<strong>en</strong>tación particular,<br />

es una cuestión simple cambiar dicho archivo para que use calificaciones explícitas<br />

o declaraciones using para eliminar el cruce sin t<strong>en</strong>er que modificar ningún otro<br />

archivo de implem<strong>en</strong>tación.<br />

Los ficheros de cabecera ya son otra historia. Prácticam<strong>en</strong>te nunca querrá introducir<br />

una directiva using global <strong>en</strong> un fichero de cabecera, puesto que eso significaría<br />

que cualquier otro archivo que incluyese la cabecera también t<strong>en</strong>dría el espacio<br />

de nombres desplegado (y un fichero de cabecera puede incluir otros ficheros de<br />

cabecera).<br />

Por tanto, <strong>en</strong> los ficheros de cabecera debería utilizar o bi<strong>en</strong> cualificación explícita<br />

o bi<strong>en</strong> directivas using de ámbito y declaraciones using. Éste es el método que<br />

<strong>en</strong>contrará <strong>en</strong> este libro. Sigui<strong>en</strong>do esta metodología no «contaminará» el espacio de<br />

nombres global, que implicaría volver al mundo pre-espacios de nombres de <strong>C++</strong>.<br />

10.3. Miembros estáticos <strong>en</strong> <strong>C++</strong><br />

A veces se necesita un único espacio de almac<strong>en</strong>ami<strong>en</strong>to para utilizado por todos<br />

los objetos de una clase. En C, podría usar una variable global pero eso no es muy<br />

287<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!