[Solucionado]Nuevo problemilla en herencia

Iniciado por cazagavilan, 24 Abril 2012, 05:31 AM

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

cazagavilan

Hola!

Ya tengo el codigo casi acabado... solo me da un error y es que no me almacena el nombre completo del propietario, solo la primera letra.

Código (cpp) [Seleccionar]
#include<iostream>
#include<cstring>
using namespace std;
//Declaracion clase VEHICULO
class vehiculo
{
protected:
char *cad;
int litros;
int kphMas;
int kphMenos;
int veloActual;
int capaDepo;
int año;
int capDepo;
int liDepo;
public:
vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c);
~vehiculo();
void imprimir();
void llenarDepo();
void acelerar(int kphMas);
void frenar(int kphMenos);
char *leer(char *c);
};

//Declaracion derivada MOTO
class moto : public vehiculo
{
protected:
int cilindrada;
int cilinInicial;
char *tipo;
public:
moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial, const char* c, const char *c1);
~moto();
char* leer1(char* c1);
void imprimir();
};

//Declaracion derivada COCHE
class coche : public vehiculo
{
protected:
int asientos;
int asientosInicial;
char *marca;
public:
coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial, const char* c, const char *c1);
~coche();
char * leer1(char* c1);
void imprimir();
};


//Constructor VEHICULO
vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c)
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);

}

//Destructor VEHICULO
vehiculo::~vehiculo()
{
delete [] cad;
}

//Metodo leer VEHICULO
char *vehiculo::leer(char* c)
{
strcpy(c, cad);
return c;
}

// Metodo llenar deposito  VEHICULO
void vehiculo::llenarDepo()
{
cout << "Estas llenando el deposito..." << endl;
for(; liDepo < capDepo; liDepo++)
{
}
cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl;
}

// Metodo imprimir VEHICULO
void vehiculo::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del coche es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl << endl;
}

// Metodo acelerar VEHICULO
void vehiculo::acelerar(int kphMas)
{
if(liDepo - kphMas / 10 > 0)
{
cout << "Estas acelerando!" << endl;
   veloActual = veloActual + kphMas;
   liDepo = liDepo - kphMas / 10;
   cout << "Su velocidad actual es: " << veloActual << endl;
   cout << "Su deposito actual es: " << liDepo << endl << endl;
}
else
{
cout << "El deposito esta vacio!" << endl << endl;
veloActual = 0;
}
}

// Metodo frenar VEHICULO
void vehiculo::frenar(int kphMenos)
{
if( veloActual - kphMenos > 0)
{
cout << "Estas frenando!" << endl;
veloActual = veloActual - kphMenos;
cout << "Su velocidad actual es: " << veloActual << endl << endl;
}
else
{
veloActual = 0;
cout << "Ya estas parado!" << endl << endl;
}
}

// Constructor MOTO
moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)
{
cout << "Ha salido la moto del taller!" << endl << endl;
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
cilindrada = cilinInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);
tipo = new char[strlen(c1)+1];
strcpy(tipo, c1);
}

// Destructor Moto
moto::~moto()
{
delete [] tipo;
}

// Metodo leer MOTO
char *moto::leer1(char* c1)
{
strcpy(c1, tipo);
return c1;
}

// Metodo imprimir MOTO
void moto::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del Moto es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl;
cout << "La cilindrada de la moto es: " << cilindrada  <<endl;
cout << "El tipo de la moto es: " << tipo << endl << endl;
}

//Constructor COCHE
coche::coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int asientosInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)
{
cout << "Ha salido el coche del Parking!" << endl << endl;
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
asientos = asientosInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);
marca = new char[strlen(c1)+1];
strcpy(marca, c1);
}

// Destructor COCHE
coche::~coche()
{
delete [] marca;
}

// Metodo leer COCHE
char *coche::leer1(char* c1)
{
strcpy(c1, marca);
return c1;
}

// Metodo imprimir COCHE
void coche::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del Moto es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl;
cout << "El coche tiene: " << asientos << " asientos"  <<endl;
cout << "La marca del coche es: " << marca << endl << endl;
}

int main()
{
coche ferrari(0, 90, 90, 2012, 2, "Jonathan Gavilan Mora", "Ferrari");
ferrari.acelerar(60);
ferrari.acelerar(60);
ferrari.acelerar(100);
ferrari.acelerar(60);
ferrari.acelerar(40);
ferrari.frenar(100);
ferrari.frenar(100);
ferrari.frenar(120);
ferrari.llenarDepo();
cout << "Datos actuales de Ferrari: " << endl;
ferrari.imprimir();
moto honda(0, 50, 50, 2010, 1000,  "Jonathan Gavilan Mora", "Carretera");
honda.acelerar(100);
honda.acelerar(150);
honda.acelerar(100);
honda.frenar(200);
honda.acelerar(100);
honda.acelerar(100);
honda.llenarDepo();
cout << "Datos atuales de Honda: " << endl;
honda.imprimir();

system("pause");
return 0;
}


Muchas gracias!


Edit: El problema estaba en la funcion imprimir() de coche y moto, estaban asi "*cad" y era asi "cad".