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 499 — #537<br />

✐<br />

16.6. Manejando objetos por valor<br />

// initialization for each elem<strong>en</strong>t in array:<br />

T stack[ssize];<br />

int top;<br />

public:<br />

Stack() : top(0) {}<br />

// Copy-constructor copies object into array:<br />

void push(const T& x) {<br />

require(top < ssize, "Too many push()es");<br />

stack[top++] = x;<br />

}<br />

T peek() const { return stack[top]; }<br />

// Object still exists wh<strong>en</strong> you pop it;<br />

// it just isn’t available anymore:<br />

T pop() {<br />

require(top > 0, "Too many pop()s");<br />

return stack[--top];<br />

}<br />

};<br />

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

El constructor de copia de los objetos cont<strong>en</strong>idos hac<strong>en</strong> la mayoría del trabajo<br />

pasando y devolvi<strong>en</strong>do objetos por valor. D<strong>en</strong>tro de push(), el almac<strong>en</strong>ami<strong>en</strong>to del<br />

objeto <strong>en</strong> el array Stack vi<strong>en</strong>e acompañado con T::operator=. Para garantizar<br />

que funciona, una clase llamada SelfCounter manti<strong>en</strong>e una lista de las creaciones<br />

y construcciones de copia de los objetos.<br />

//: C16:SelfCounter.h<br />

#ifndef SELFCOUNTER_H<br />

#define SELFCOUNTER_H<br />

#include "ValueStack.h"<br />

#include <br />

class SelfCounter {<br />

static int counter;<br />

int id;<br />

public:<br />

SelfCounter() : id(counter++) {<br />

std::cout

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

Saved successfully!

Ooh no, something went wrong!