5.5.2. Modificar Stack para usar control de acceso

Como un segundo ejemplo, aquí está Stack convertido en clase. Ahora la estructura anidada es private, lo que es bueno pues asegura que el programador cliente no tendrá que fijarse ni depender de la representación interna de Stack:

//: C05:Stack2.h
// Nested structs via linked list
#ifndef STACK2_H
#define STACK2_H

class Stack {
  struct Link {
    void* data;
    Link* next;
    void initialize(void* dat, Link* nxt);
  }* head;
public:
  void initialize();
  void push(void* dat);
  void* peek();
  void* pop();
  void cleanup();
};
#endif // STACK2_H ///:~

Listado 5.7. C05/Stack2.h


Como antes, la implementación no cambia por lo que no la repetimos aquí. El programa de prueba es también idéntico. La única cosa que ha cambiado es la robustez del interfaz de la clase. El valor real del control de acceso es prevenirle de traspasar las fronteras durante el desarrollo. De hecho, el compilador es el único que conoce los niveles de protección de los miembros de la clase. No hay información sobre el control de acceso añadida en el nombre del miembro que llega al enlazador. Todas las comprobaciones sobre protección son hechas por el compilador; han desaparecido al llegar a la ejecución.

Dese cuenta de que la interfaz presentada al programador cliente es ahora realmente la de una pila. Sucede que esta implementada como una lista enlazada, pero usted puede cambiar esto sin afectar a la forma en que los programas cliente interactúan con ella, o (más importante aun) sin afectar a una sola linea de su código.