Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 284 — #322<br />
✐<br />
Capítulo 10. Control de nombres<br />
int g();<br />
};<br />
X::Z::Z(int i) { u = v = w = i; }<br />
int X::Z::g() { return u = v = w = 0; }<br />
void X::func() {<br />
X::Z a(1);<br />
a.g();<br />
}<br />
int main(){} ///:~<br />
Nótese que la definición X::Y::i puede referirse también a un atributo de la<br />
clase Y anidada d<strong>en</strong>tro de la clase X <strong>en</strong> lugar del espacio de nombres X.<br />
La directiva using<br />
Puesto que teclear toda la especificación para un id<strong>en</strong>tificador <strong>en</strong> un espacio de<br />
nombres puede resultar rápidam<strong>en</strong>te tedioso, la palabra clave using le permite importar<br />
un espacio de nombres <strong>en</strong>tero de una vez. Cuando se utiliza <strong>en</strong> conjunción<br />
con la palabra clave namespace, se dice que utilizamos una directiva using. Las<br />
directivas using hac<strong>en</strong> que los nombres actú<strong>en</strong> como si pert<strong>en</strong>ecies<strong>en</strong> al ámbito del<br />
espacio de nombres que les incluye más cercano por lo que puede utilizar conv<strong>en</strong>i<strong>en</strong>tem<strong>en</strong>te<br />
los nombres sin explicitar completam<strong>en</strong>te su especificación. Considere<br />
el sigui<strong>en</strong>te espacio de nombres:<br />
//: C10:NamespaceInt.h<br />
#ifndef NAMESPACEINT_H<br />
#define NAMESPACEINT_H<br />
namespace Int {<br />
<strong>en</strong>um sign { positive, negative };<br />
class Integer {<br />
int i;<br />
sign s;<br />
public:<br />
Integer(int ii = 0)<br />
: i(ii),<br />
s(i >= 0 positive : negative)<br />
{}<br />
sign getSign() const { return s; }<br />
void setSign(sign sgn) { s = sgn; }<br />
// ...<br />
};<br />
}<br />
#<strong>en</strong>dif // NAMESPACEINT_H ///:~<br />
Un uso de las directivas using es incluir todos los nombres <strong>en</strong> Int d<strong>en</strong>tro de<br />
otro espacio de nombres, dejando aquellos nombres anidados d<strong>en</strong>tro del espacio de<br />
nombres<br />
//: C10:NamespaceMath.h<br />
#ifndef NAMESPACEMATH_H<br />
#define NAMESPACEMATH_H<br />
#include "NamespaceInt.h"<br />
namespace Math {<br />
using namespace Int;<br />
284<br />
✐<br />
✐<br />
✐<br />
✐