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 184 — #222<br />

✐<br />

Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />

//: C05:Handle.cpp {O}<br />

// Handle implem<strong>en</strong>tation<br />

#include "Handle.h"<br />

#include "../require.h"<br />

// Define Handle’s implem<strong>en</strong>tation:<br />

struct Handle::Cheshire {<br />

int i;<br />

};<br />

void Handle::initialize() {<br />

smile = new Cheshire;<br />

smile->i = 0;<br />

}<br />

void Handle::cleanup() {<br />

delete smile;<br />

}<br />

int Handle::read() {<br />

return smile->i;<br />

}<br />

void Handle::change(int x) {<br />

smile->i = x;<br />

} ///:~<br />

Chesire es una estructura anidada, así que se debe ser definido con resolución de<br />

ámbito:<br />

struct Handle::Cheshire {<br />

En Handle::initialize(), se solicita espacio de almac<strong>en</strong>ami<strong>en</strong>to para una<br />

estructura Chesire, y <strong>en</strong> Handle::cleanup() se libera ese espacio. Este espacio<br />

se usa para almac<strong>en</strong>ar todos los datos que estarían normalm<strong>en</strong>te <strong>en</strong> la sección privada<br />

de la clase. Cuando compile Handle.cpp, esta definición de la estructura estará<br />

escondida <strong>en</strong> el fichero objeto donde nadie puede verla. Si cambia los elem<strong>en</strong>tos de<br />

Chesire, el único archivo que debe ser recompilado es Handle.cpp pues el archivo<br />

de cabecera permanece inalterado.<br />

El uso de Handle es como el uso de cualquier clase: incluir la cabecera, crear<br />

objetos, y mandar m<strong>en</strong>sajes.<br />

//: C05:UseHandle.cpp<br />

//{L} Handle<br />

// Use the Handle class<br />

#include "Handle.h"<br />

int main() {<br />

Handle u;<br />

u.initialize();<br />

u.read();<br />

u.change(1);<br />

u.cleanup();<br />

} ///:~<br />

184<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!