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 194 — #232<br />

✐<br />

Capítulo 6. Inicialización y limpieza<br />

}///:~<br />

En el código anterior, tanto el goto como el switch pued<strong>en</strong> saltar la s<strong>en</strong>t<strong>en</strong>cia<br />

<strong>en</strong> la que se invoca un constructor. Ese objeto corresponde al ámbito incluso si no<br />

se invoca el constructor, de modo que el compilador dará un m<strong>en</strong>saje de error. Esto<br />

garantiza de nuevo que un objeto no se puede crear si no se inicializa.<br />

Todo el espacio de almac<strong>en</strong>ami<strong>en</strong>to necesario se asigna <strong>en</strong> la pila, por supuesto.<br />

Ese espacio lo faciliza el compilador movi<strong>en</strong>do el puntero de pila «hacia abajo» (dep<strong>en</strong>di<strong>en</strong>do<br />

de la máquina implica increm<strong>en</strong>tar o decrem<strong>en</strong>tar el valor del puntero de<br />

pila). Los objetos también se pued<strong>en</strong> alojar <strong>en</strong> el montículo usando new, algo que se<br />

verá <strong>en</strong> el capítulo 13. (FIXME:Ref C13)<br />

6.4. Stash con constructores y destructores<br />

Los ejemplos de los capítulos anteriores ti<strong>en</strong><strong>en</strong> funciones que ti<strong>en</strong><strong>en</strong> correspond<strong>en</strong>cia<br />

directa con constructores y destructores: initialize() y cleanup(). Éste<br />

es el fichero de cabecera de Stash, utilizando constructor y destructor:<br />

//: C06:Stash2.h<br />

// With constructors & destructors<br />

#ifndef STASH2_H<br />

#define STASH2_H<br />

class Stash {<br />

int size; // Size of each space<br />

int quantity; // Number of storage spaces<br />

int next; // Next empty space<br />

// Dynamically allocated array of bytes:<br />

unsigned char* storage;<br />

void inflate(int increase);<br />

public:<br />

Stash(int size);<br />

~Stash();<br />

int add(void* elem<strong>en</strong>t);<br />

void* fetch(int index);<br />

int count();<br />

};<br />

#<strong>en</strong>dif // STASH2_H ///:~<br />

Las únicas definiciones de métodos que han cambiado son initialize() y c-<br />

leanup(), que han sido reemplazadas con un constructor y un destructor.<br />

//: C06:Stash2.cpp {O}<br />

// Constructors & destructors<br />

#include "Stash2.h"<br />

#include "../require.h"<br />

#include <br />

#include <br />

using namespace std;<br />

const int increm<strong>en</strong>t = 100;<br />

Stash::Stash(int sz) {<br />

194<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!