[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