[C con Clase] Ayúda con programa de Pila

Steven Davidson srd4121 en njit.edu
Jue Abr 28 00:05:19 CEST 2011


Hola Fernando,

On 4/27/2011 3:21 PM, FLCol wrote:
> Saludos
>
> Excelente Respuesta.
>
> Entonces cómo definiria el tipo de Vehiculo ya que no utilizario
> Enum.

La idea es que usarás la herencia y las funciones virtuales de cada 
clase heredada para describir la funcionalidad exacta para ella. No hace 
falta conocer el tipo genuino, porque el sistema polimórfico lo hace por 
nosotros. Por ejemplo,

class Vehiculo
{
public:
   void mostrar() const;
   ...
};

class Camion : public Vehiculo {...};
class Furgoneta : public Vehiculo {...};
class Carro : public Vehiculo {...};
class Moto : public Vehiculo {...};

// contiene la lista de nodos de 'Vehiculo *'
class Garaje
{
private:
   Nodo *pila;

public:
   void mostrar() const
   {
     pila->obtener()->mostrar();  // Invocamos 'Vehiculo::mostrar()'
   }
...
};

...

Garaje obj;

obj.apilar( new Carro("OJO123", "Carro", "Gris", "Chevrolet", "Camaro") );

obj.mostrar();  // Mostramos el primer vehículo en el garaje

A través de polimorfismo, 'Garaje::mostrar()' invocará correctamente a 
'Carro::mostrar()', aunque se trate de un 'Vehiculo *'.

> Este es el código de Vehiculo.
>
> #ifndef __CLASSVehiculo
>
> #define __CLASSVehiculo
>
>
>
> #include<iostream>
>
> #include<string.h>
>

Como dije antes, escribe <string>

>
> using namespace std;
>
> class Vehiculo
> {
>      protected:
>          string matricula;
>          string color;
>          string marca;
>          string modelo;
>
>      public:
>          virtual void asignarMatricula(string matricula)=0;
>          virtual string obtenerMatricula()=0;
>          virtual void asignarColor(string color)=0;
>          virtual string obtenerColor()=0;
>          virtual void asignarMarca(string marca)=0;
>          virtual string obtenerMarca()=0;
>          virtual void asignarModelo(string modelo)=0;
>          virtual string obtenerModelo()=0;
>

No es recomendable aceptar objetos 'string', ya que no es necesario. En 
su lugar, acepta referencias a 'string' y si es necesario indica que son 
constantes. Por ejemplo,

virtual void asignarMatricula( const string &matricula ) = 0;

Pero sí está bien que retornes un objeto nuevo de tipo 'string'.

>      };
>
> #endif
>
>
> Otra pregunta este estaria bien definido:
>

[CORTE]

>
> podrias ayudarme a implementar la clase Nodo.
>

Creo que lo he hecho al principio de este correo-e :)

Aparte de esta clase, creo que no necesitas crear 'Lista' para luego 
crear 'Pila', al menos que necesites 'Lista' en alguna otra parte del 
programa. Pienso que es más fácil crear 'Pila' directamente, como si 
fuese una lista especial.


Espero que esto te sirva.

Steven





Más información sobre la lista de distribución Cconclase