Título: Programacion orientada a objetos
Publicado por: cazagavilan en 21 Abril 2012, 00:17 am
Buenas de nuevo, Tengo este codigo y lo que me falla es cuando "vehiculo" acelera... Me aparece por pantalla -8524654846( mas o menos) y no se por que es. Gracias! #include<iostream> using namespace std; class vehiculo { private: int litros; int kphMas; int kphMenos; int veloActual; int capaDepo; int año; int capDepo; int liDepo; char *propietario[25]; public: vehiculo(int veloActual, int liDepo, int capDepo, int año); ~vehiculo(); void imprimir(int año, char *propietario); int llenarDepo(); int acelerar(int kphMas); int frenar(int kphMenos); void nPropietario(char* propietario); }; vehiculo::vehiculo(int veloActualual, int liDepo, int capDepo, int año) { } vehiculo::~vehiculo() { } int vehiculo::llenarDepo() { for(; liDepo <= capDepo; liDepo++) { cout << "El deposito esta lleno" << endl; } return liDepo; } void vehiculo::imprimir(int año, char*propietario) { 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: " << *propietario << endl; } int vehiculo::acelerar(int kphMas) { cout << "Estas acelerando!" << endl; veloActual = veloActual + kphMas; liDepo = liDepo - kphMas / 2; cout << "Su velocidad actual es: " << veloActual << endl; cout << "Su deposito actual es: " << liDepo << endl; return veloActual; return liDepo; } int vehiculo::frenar(int kphMenos) { if( veloActual >= 0) { cout << "Estas frenando!" << endl; veloActual = veloActual - kphMenos; cout << "Su velocidad actual es: " << veloActual << endl; } else { cout << "Ya estas parado!" << endl; } return veloActual; } void vehiculo::nPropietario( char* propietario) { propietario[0] = 'P'; propietario[1] = 'e'; propietario[2] = 'p'; propietario[3] = 'e'; cout << "EL nombre del propietario es: " << *propietario << endl; } int main() { vehiculo mercedes(0, 60, 60, 1990); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.frenar(20); mercedes.frenar(65); mercedes.frenar(65); mercedes.frenar(10); system("pause"); return 0; }
Título: Re: Programacion orientada a objetos
Publicado por: maxim_o en 21 Abril 2012, 00:31 am
Asi a ojo la funcion acelerar devuelve dos return... int vehiculo::acelerar(int kphMas) { cout << "Estas acelerando!" << endl; veloActual = veloActual + kphMas; liDepo = liDepo - kphMas / 2; cout << "Su velocidad actual es: " << veloActual << endl; cout << "Su deposito actual es: " << liDepo << endl; return veloActual; return liDepo; // este nunca se cumple, Sale antes devolviendo VeloActual }
De echo los return podrias hasta quitarlos y hacer void ya que desde donde la llamas no almacenas el valor devuelto.
Y supongo que el error por el que no te da el resultado esperado es que en el constructor: vehiculo::vehiculo(int veloActualual, int liDepo, int capDepo, int año) Si te fijas no es veloActual, sino veloActualual, por lo que la variable veloActual esta sin inicializar y por eso te da esos valores....
Título: Re: Programacion orientada a objetos
Publicado por: cazagavilan en 21 Abril 2012, 08:19 am
Ya esta resuelto. Aparte de lo que tu decias, tambien era por que el constructor no inicializaba los atributos de la clase con sus parametros.
Gracias.
Título: Re: Programacion orientada a objetos
Publicado por: cazagavilan en 21 Abril 2012, 10:15 am
Ahora tengo otro problema... no consigo introducir el nombre del propietario o me da error o me da simbolos extraños.. #include<iostream> using namespace std; class vehiculo { private: int veloInicial; int añoInicial; int capDepoInicial; int lidepoInicial; 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); ~vehiculo(); void imprimir(); void llenarDepo(); void acelerar(int kphMas); void frenar(int kphMenos); }; vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial) { veloActual = veloInicial; liDepo = liInicial; capDepo = capDepoInicial; año = añoInicial; } vehiculo::~vehiculo() { } void vehiculo::llenarDepo() { for(; liDepo < capDepo; liDepo++) { } cout << "El deposito esta lleno" << endl << endl; } 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: " << endl << endl; } 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; } } 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; } } int main() { vehiculo mercedes(0, 60, 60, 1990); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.frenar(50); mercedes.frenar(50); mercedes.frenar(60); mercedes.acelerar(50); mercedes.llenarDepo(); mercedes.imprimir(); system("pause"); return 0; }
Muchas gracias.
Título: Re: Programacion orientada a objetos
Publicado por: cazagavilan en 21 Abril 2012, 10:55 am
Solucionado. #include<iostream> #include<cstring> using namespace std; class vehiculo { private: char *cad; int veloInicial; int añoInicial; int capDepoInicial; int lidepoInicial; 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); }; char propietario[] = "Jonathan Gavilan Mora"; 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); } vehiculo::~vehiculo() { delete [] cad; } char *vehiculo::leer(char* c) { strcpy(c, cad); return c; } void vehiculo::llenarDepo() { cout << "Estas llenando el deposito..." << endl; for(; liDepo < capDepo; liDepo++) { } cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl; } 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: " << propietario <<endl << endl; } 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; } } 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; } } int main() { vehiculo mercedes(0, 60, 60, 1990, "Jonathan Gavilan Mora"); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.acelerar(50); mercedes.frenar(50); mercedes.frenar(50); mercedes.frenar(60); mercedes.acelerar(50); mercedes.llenarDepo(); mercedes.imprimir(); system("pause"); return 0; }
|