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 181 — #219<br />

✐<br />

5.5. La clase<br />

5.5.1. Modificaciones <strong>en</strong> Stash para usar control de acceso<br />

Ti<strong>en</strong>e s<strong>en</strong>tido coger el ejemplo del capítulo 4 y modificarlo para usar clases y control<br />

de acceso. Dese cu<strong>en</strong>ta de cómo la parte de la interfaz a usar <strong>en</strong> la programación<br />

cli<strong>en</strong>te está claram<strong>en</strong>te difer<strong>en</strong>ciada, así no hay posibilidad de que el programador<br />

cli<strong>en</strong>te manipule accid<strong>en</strong>talm<strong>en</strong>te parte de la clase que no debería.<br />

//: C05:Stash.h<br />

// Converted to use access control<br />

#ifndef STASH_H<br />

#define STASH_H<br />

class Stash {<br />

int size; // Size of each space<br />

int quantity; // Number of storage spaces<br />

int next; // Next empty space<br />

// Dynamically allocated array of bytes:<br />

unsigned char* storage;<br />

void inflate(int increase);<br />

public:<br />

void initialize(int size);<br />

void cleanup();<br />

int add(void* elem<strong>en</strong>t);<br />

void* fetch(int index);<br />

int count();<br />

};<br />

#<strong>en</strong>dif // STASH_H ///:~<br />

La función inflate() se ha hecho private porque solo es usada por la función<br />

add() y por tanto es parte de la implem<strong>en</strong>tación interna, no de la interfaz. Esto<br />

significa que, más tarde, puede cambiar la implem<strong>en</strong>tación interna para usar un sistema<br />

de gestión de memoria difer<strong>en</strong>te.<br />

Aparte del nombre del archivo include, la cabecera de antes es lo único que ha<br />

sido cambiado para este ejemplo. El fichero de implem<strong>en</strong>tación y de prueba son los<br />

mismos.<br />

5.5.2. Modificar Stack para usar control de acceso<br />

Como un segundo ejemplo, aquí está Stack convertido <strong>en</strong> clase. Ahora la estructura<br />

anidada es private, lo que es bu<strong>en</strong>o pues asegura que el programador cli<strong>en</strong>te<br />

no t<strong>en</strong>drá que fijarse ni dep<strong>en</strong>der de la repres<strong>en</strong>tación interna de Stack:<br />

//: C05:Stack2.h<br />

// Nested structs via linked list<br />

#ifndef STACK2_H<br />

#define STACK2_H<br />

class Stack {<br />

struct Link {<br />

void* data;<br />

Link* next;<br />

void initialize(void* dat, Link* nxt);<br />

181<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!