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 197 — #235<br />
✐<br />
6.5. Stack con constructores y destructores<br />
6.5. Stack con constructores y destructores<br />
Reimplem<strong>en</strong>tar la lista <strong>en</strong>lazada (d<strong>en</strong>tro de Stack) con constructores y destructores<br />
muestra claram<strong>en</strong>te cómo costructores y destructores utilizan new y delete.<br />
Éste es el fichero de cabecera modficado:<br />
//: C06:Stack3.h<br />
// With constructors/destructors<br />
#ifndef STACK3_H<br />
#define STACK3_H<br />
class Stack {<br />
struct Link {<br />
void* data;<br />
Link* next;<br />
Link(void* dat, Link* nxt);<br />
~Link();<br />
}* head;<br />
public:<br />
Stack();<br />
~Stack();<br />
void push(void* dat);<br />
void* peek();<br />
void* pop();<br />
};<br />
#<strong>en</strong>dif // STACK3_H ///:~<br />
No sólo hace que Stack t<strong>en</strong>ga un constructor y destructor, también aparece la<br />
clase anidada Link.<br />
//: C06:Stack3.cpp {O}<br />
// Constructors/destructors<br />
#include "Stack3.h"<br />
#include "../require.h"<br />
using namespace std;<br />
Stack::Link::Link(void* dat, Link* nxt) {<br />
data = dat;<br />
next = nxt;<br />
}<br />
Stack::Link::~Link() { }<br />
Stack::Stack() { head = 0; }<br />
void Stack::push(void* dat) {<br />
head = new Link(dat,head);<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 />
197<br />
✐<br />
✐<br />
✐<br />
✐