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

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 />

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

Saved successfully!

Ooh no, something went wrong!