Arrays de objetos con listas en c++

Iniciado por tenji, 27 Agosto 2011, 17:59 PM

0 Miembros y 1 Visitante están viendo este tema.

tenji

Hola a todos, escribo en el foro para saber si me pudieran ayudar con un ejercicio. Dice asi:
Crear una clase Automóvil cuyos atributos serán: matricula, cilindrada, consumo y marca. Escribir el/los constructores necesarios para esta clase.
•   Crear una clase Coche, hija publica de Automóvil que contenga Nº de puertas y todos los atributos heredados de la clase automóvil. Define el constructor.
•   Crear una clase Motocicleta, hija publica de Automóvil, sus atributos serán los heredados de la clase automóvil. Define el constructor.
•   Gestiona un concesionario con un máximo de 25 motocicletas y 75 coches organizados en arrays de objetos. Obtener un listado de las motocicletas y los coches de los que disponemos.

Bien, mi codigo es este:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MC 2000

using namespace std;
class Automovil{
                char matricula, marca;
                int cilindrada, consumo;
                Automovil *sig;
      public:
                Automovil();
                Automovil(char ma,char mar, int ci, int con);
                               void ver_automovil();
      } ;
     
class Coche:virtual public Automovil{
      int numpuertas;
      public:
             Coche():Automovil(){numpuertas=0;}
             Coche(char ma,char mar, int ci, int con,int numpu):Automovil(ma,mar,ci,con){numpuertas=numpu;};
      } ;
     
class Motocicleta:virtual public Automovil{
      public:
             Motocicleta():Automovil(){};
             Motocicleta(char ma,char mar, int ci, int con):Automovil(ma,mar,ci,con){};
   };
     
class Lista{
      private:
              Automovil *lauto;
      public:
             Lista(){lauto=NULL;}
             void alta_coche();
             void alta_moto();
             int val(int min, int max);
             void cadenas(char *a);
             void ver_lista_coche();
             void ver_lista_moto();
           };

void Lista::ver_lista_moto(){
     Automovil *aux= lauto;
     while(aux){
                aux->ver_automovil();
               
                   }
   }         
             
void Lista::ver_lista_coche(){
     Automovil *aux= lauto;
     while(aux){
                aux->ver_automovil();
               
                   }
   }
   
void Lista::alta_moto(){
        char ma;char mar;
        int ci; int con;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca de la moto:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula de la moto:\t";
            cadenas(&mar);
            cout<<"Introduzca la cilindrada de la moto:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo de la moto:\t";
            con=val(4,8);
           
            }while(!ok);

         }       

void Lista::alta_coche(){
        char ma;char mar;
        int ci; int con;int numpu;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca del vehiculo:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula del vehiculo:\t";
            cadenas(&mar);
            cout<<"Introduzca el numero de puertas del vehiculo:\t";
            numpu=val(4,8);
            cout<<"Introduzca la cilindrada del vehiculo:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo del vehiculo:\t";
            con=val(4,8);
                        }while(!ok);

         }

int Lista:: val(int min, int max){
    long re;
    do{
         cin>>re;
         if(re<min||re>max)
         cout<<"Error\t";
       
      }while(re<min||re>max);
    return re;
    }
   
void Lista::cadenas(char *a){
         char b[MC];
         int n;
         fflush(stdin);
         fgets(b,MC-1,stdin);
         n=strlen(b);
         b[n-1]='\0';
         strcpy(a,b);
          }
         
void Automovil::ver_automovil(){
     int tipo;
     switch(tipo){
     case 1:cout<<"COCHE";
     break;
     default:
             cout<<"MOTO";
             break;}
             cout<<"MARCA:"<<marca<<endl;
             cout<<"MATRICULA"<<matricula<<endl;
             cout<<"CONSUMO"<<consumo<<endl;
             cout<<"CILINDRADA"<<cilindrada<<endl;
    }
     
void sel(int tipo, Lista *lista){
             switch(tipo){
             case 1: lista->alta_moto();
             break;
             case 2: lista->alta_coche();
             break;
             case 3: lista->ver_lista_moto();
             break;
             case 4: lista->ver_lista_coche();
             break;
             default:
             break;
             }

}

int main()
{
    int res,i;
    Lista *lista;
    Motocicleta motos[25];
    for(i=0;i<25;i++)
    motos[i]=new Motocicleta;
    Coche coches[75];
    for(i=0;i<75;i++)
    coches[i]=new Coche;
    do{
    cout<<"*****************BIENVENIDOS AL CONCESIONARIO MONGOCONGO*************"<<endl;
    cout<<"1.Alta moto"<<endl;
    cout<<"2.Alta coche"<<endl;
    cout<<"3.ver motos"<<endl;
    cout<<"4.ver coches"<<endl;
            res = val(1,4);
            sel(res,lista);
            }while(res!=4);

    system("PAUSE");
    return 0;
}


Necesito saber como almacenar las motos y los coches (previa creacion de ambas claro).
Agradeceria que me dijeran todos los fallos posibles, trucos, consejos...que me ayuden a ir al grano y evitar quebraderos de cabeza.

Muchas gracias y espero tener respuesta.
Un saludo
Tenji


tenji

Para que os deis cuenta de hasta que punto se programar, me he dado cuenta de que si lo que piden es almacenar la informacion en arrays ¿para que quiero una lista?.
Aunque obviando eso, el programa me sigue sin ir. ¿Alguien puede ayudarme?
NUevo codigo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MC 2000

using namespace std;
class Automovil{
                char matricula[MC], marca[MC];
                int cilindrada, consumo;
               
      public:
                Automovil(){
                            strcpy(matricula,"");
                            strcpy(marca,"");
                            cilindrada=0;
                            consumo=0;
                        }
                Automovil(char *ma,char *mar, int ci, int con){
                            strcpy(matricula,ma);
                            strcpy(marca,mar);
                            cilindrada=ci;
                            consumo=con;
                             
                               }
                              int val(int min, int max);
                              void cadenas(char *a);
                               
                  } ;
     
class Coche:virtual public Automovil{
      int numpuertas;
      public:
             Coche():Automovil(){numpuertas=0;}
             Coche(char *ma,char *mar, int ci, int con,int numpu):Automovil(ma,mar,ci,con){numpuertas=numpu;};
             void ver_coche();
             void alta_coche();
      } ;
     
class Motocicleta:virtual public Automovil{
      public:
             Motocicleta():Automovil(){};
             Motocicleta(char *ma,char *mar, int ci, int con):Automovil(ma,mar,ci,con){};
             void ver_moto();
             void alta_moto();
   };


   
void Motocicleta::alta_moto(){
        char ma;char mar;
        int ci; int con;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca de la moto:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula de la moto:\t";
            cadenas(&mar);
            cout<<"Introduzca la cilindrada de la moto:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo de la moto:\t \n";
            con=val(4,8);
           
            }while(!ok);
   
         }

void Coche::alta_coche(){
        char ma;char mar;
        int ci; int con;int numpu;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca del vehiculo:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula del vehiculo:\t";
            cadenas(&mar);
            cout<<"Introduzca el numero de puertas del vehiculo:\t";
            numpu=val(4,8);
            cout<<"Introduzca la cilindrada del vehiculo:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo del vehiculo:\t\n";
            con=val(4,8);
                        }while(!ok);
         } 

int Automovil:: val(int min, int max){
    long re;
    do{
         cin>>re;
         if(re<min||re>max)
         cout<<"Error\t";
       
      }while(re<min||re>max);
    return re;
    }
   
void Automovil::cadenas(char *a){
         char b[MC];
         int n;
         fflush(stdin);
         fgets(b,MC-1,stdin);
         n=strlen(b);
         b[n-1]='\0';
         strcpy(a,b);
          }
         
         
void Coche::ver_coche(){
     cout<<"COCHE\n";
     cout<<"MARCA: \n"<<marca<<endl;
     cout<<"MATRICULA \n"<<matricula<<endl;
     cout<<"CONSUMO \n"<<consumo<<endl;
     cout<<"CILINDRADA \n"<<cilindrada<<endl;
     cout<<"NUMERO DE PUERTAS \n"<<numpuertas<<endl;
                  }
                     
void Motocicleta::ver_moto(){
cout<<"MOTO\n";
cout<<"MARCA: \n"<<marca<<endl;
cout<<"MATRICULA \n"<<matricula<<endl;
cout<<"CONSUMO \n"<<consumo<<endl;
cout<<"CILINDRADA \n"<<cilindrada<<endl;
}


int sel(int tipo ){
             switch(tipo){
             case 1: alta_moto();
             break;
             case 2: alta_coche();
             break;
             case 3: //¿QUE DEBO PONER?;
             break;
             case 4: //¿QUE DEBO PONER?;
             break;
             default:
             break;
             }

}
int main(int argc, char *argv[])
{
   int res; int i;

    Motocicleta motos[25];
    for(i=0;i<25;i++)
    motos[i]=new Motocicleta;
    Coche coches[75];
    for(i=0;i<75;i++)
    coches[i]=new Coche;
    do{
    cout<<"*****************BIENVENIDOS AL CONCESIONARIO MONGOCONGO*************"<<endl;
    cout<<"1.Alta moto"<<endl;
    cout<<"2.Alta coche"<<endl;
    cout<<"3.ver motos"<<endl;
    cout<<"4.ver coches"<<endl;
            res = val(1,4);
            sel(res);
            }while(res!=4);
    system("PAUSE");
    return 0;
}