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