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

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

Saved successfully!

Ooh no, something went wrong!