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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 468 — #506<br />

✐<br />

Capítulo 15. Polimorfismo y Funciones virtuales<br />

Para simplificar las cosas se crea todo <strong>en</strong> el fichero cabecera, la definición (requerida)<br />

del destructor virtual puro es introducida <strong>en</strong> línea el el fichero cabecera, y<br />

pop() también está <strong>en</strong> línea aunque podría ser considearado como demasiado largo<br />

para ser incluido así.<br />

Los objetos Link (lista) ahora manejan punteros a Object <strong>en</strong> vez de punteros a<br />

void, y la Stack (pila) sólo aceptará y devolverá punteros a Object. Ahora Stack<br />

es mucho más flexible, ya que puede manejar un montón de tipos difer<strong>en</strong>tes pero<br />

además es capaz de destruirá cualquier objeto dejado <strong>en</strong> la pila. La nueva limitación<br />

(que será finalm<strong>en</strong>te eliminada cuando las plantillas se apliqu<strong>en</strong> al problema <strong>en</strong> el<br />

capítulo 16) es que todo lo que se ponga <strong>en</strong> la pila debe ser heredado de Object. Esto<br />

está bi<strong>en</strong> si se crea una clase desde la nada, pero ¿qué pasa si se ti<strong>en</strong>e una clase como<br />

string y se quiere ser capaz de meterla <strong>en</strong> la pila En este caso, la nueva clase debe<br />

ser al mismo tiempo un string y un Object, lo que significa que debe heredar de<br />

ambas clases. Esto se conoce como her<strong>en</strong>cia múltiple y es materia para un capítulo <strong>en</strong>tero<br />

<strong>en</strong> el Volum<strong>en</strong> 2 de este libro (se puede bajar de www.BruceEckel.com). cuando<br />

se lea este capítulo, se verá que la her<strong>en</strong>cia múltiple g<strong>en</strong>era un montón de complejidad,<br />

y que es una característica que hay que usar con cu<strong>en</strong>tagotas. Sin embargo,<br />

ésta situación es lo suficiéntem<strong>en</strong>te simple como para no t<strong>en</strong>er problemas al usar<br />

her<strong>en</strong>cia múltiple:<br />

//: C15:OStackTest.cpp<br />

//{T} OStackTest.cpp<br />

#include "OStack.h"<br />

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

#include <br />

#include <br />

#include <br />

using namespace std;<br />

// Use multiple inheritance. We want<br />

// both a string and an Object:<br />

class MyString: public string, public Object {<br />

public:<br />

~MyString() {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!