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

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

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

Saved successfully!

Ooh no, something went wrong!