Título: herencia
Publicado por: cazagavilan en 23 Abril 2012, 17:28 pm
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... #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!
Título: Re: herencia
Publicado por: Beakman en 23 Abril 2012, 19:08 pm
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". 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: #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; }
Título: Re: herencia
Publicado por: cazagavilan en 23 Abril 2012, 19:14 pm
Muchas gracias lo probare!
|