Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐