Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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