herencia

Iniciado por cazagavilan, 23 Abril 2012, 17:28 PM

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

cazagavilan

Hola,

De momento tengo este codigo(no esta acabado) pero ya me da error en los dos constructores (tengo un codigo donde solo sale la clase vehiculo y no me da error) y bueno a ver si me podeis ayudar por que vaya cacao llevo...

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 añoInicial, 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 añoInicial,  int cilinInicial, const char* c, const char *c1);
~moto();
char* leer1(char*c1);
}

//Constructor VEHICULO
vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial, const char *c)
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = añoInicial;
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 > 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;
}
}

// 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 añoInicial,  int cilinInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, añoInicial, *c)
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = añoInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);
cilindrada = cilinInicial;
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;
}



Puede que haya cambiado algo de la clase base sin darme cuenta de tanto probar.

Muchas gracias!

Beakman

#1
Compilé tu código y la mayoría de los errores eran por la letra Ñ. Luego en la definición de la clase moto faltaba un punto y coma.

Y en estas líneas el último argumento que se le pasa al constructor de vehiculo tiene que ser simplemente "c" y no "*c".
Código (cpp) [Seleccionar]
moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)


Aca está el código comentado:

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; // Error por la letra Ñ
int capDepo;
int liDepo;
public:
vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c); // Error por la letra Ñ
~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); // Error por la letra Ñ
~moto();
char* leer1(char*c1);
}; // Faltaba el punto y coma

//Constructor VEHICULO
vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c) // Error por la letra Ñ
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial; // Error por la letra Ñ
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; // Error por la letra Ñ
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 > 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;
}
}

// 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): // Error por la letra Ñ
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c) // Error por la letra Ñ
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial; // Error por la letra Ñ
cad = new char[strlen(c)+1];
strcpy(cad, c);
cilindrada = cilinInicial;
tipo = new char[strlen(c1)+1]; // habia una "m" al comienzo
strcpy(tipo, c1);
}

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

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

int main(){
return 0;
}

cazagavilan

Muchas gracias lo probare!