Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 164 — #202<br />
✐<br />
Capítulo 4. Abstracción de Datos<br />
responsable de la destrucción del objeto apuntado por data.) La función peak()<br />
también devuelve un puntero data a la cima de la pila, pero deja el elem<strong>en</strong>to <strong>en</strong> la<br />
Stack.<br />
Aquí se muestran las definiciones de los métodos:<br />
//: C04:Stack.cpp {O}<br />
// Linked list with nesting<br />
#include "Stack.h"<br />
#include "../require.h"<br />
using namespace std;<br />
void<br />
Stack::Link::initialize(void* dat, Link* nxt) {<br />
data = dat;<br />
next = nxt;<br />
}<br />
void Stack::initialize() { head = 0; }<br />
void Stack::push(void* dat) {<br />
Link* newLink = new Link;<br />
newLink->initialize(dat, head);<br />
head = newLink;<br />
}<br />
void* Stack::peek() {<br />
require(head != 0, "Stack empty");<br />
return head->data;<br />
}<br />
void* Stack::pop() {<br />
if(head == 0) return 0;<br />
void* result = head->data;<br />
Link* oldHead = head;<br />
head = head->next;<br />
delete oldHead;<br />
return result;<br />
}<br />
void Stack::cleanup() {<br />
require(head == 0, "Stack not empty");<br />
} ///:~<br />
La primera definición es particularm<strong>en</strong>te interesante porque muestra cómo se define<br />
un miembro de una estructura anidada. Simplem<strong>en</strong>te se usa un nivel adicional<br />
de resolución de ámbito para especificar el nombre de la struct interna. Stack:-<br />
:Link::initialize() toma dos argum<strong>en</strong>tos y los asigna a sus atributos.<br />
Stack::initialize() asgina cero a head, de modo que el objeto sabe que<br />
ti<strong>en</strong>e una lista vacía.<br />
Stack::push() toma el argum<strong>en</strong>to, que es un puntero a la variable a la que se<br />
quiere seguir la pista, y la apila <strong>en</strong> la Stack. Primero, usa new para pedir alojami<strong>en</strong>to<br />
para el Link que se insertará <strong>en</strong> la cima. Entonces llama a la función initialize()<br />
para asignar los valores apropiados a los miembres del Link. Fijese que el sigui<strong>en</strong>te<br />
puntero se asigna al head actual; <strong>en</strong>tonces head se asigna al nuevo puntero Link.<br />
164<br />
✐<br />
✐<br />
✐<br />
✐