elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programacion orientada a objetos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programacion orientada a objetos  (Leído 3,752 veces)
cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Programacion orientada a objetos
« 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!
Código
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class vehiculo
  5. {
  6.  
  7. private:
  8. int litros;
  9. int kphMas;
  10. int kphMenos;
  11. int veloActual;
  12. int capaDepo;
  13. int año;
  14. int capDepo;
  15. int liDepo;
  16. char *propietario[25];
  17. public:
  18. vehiculo(int veloActual, int liDepo, int capDepo, int año);
  19. ~vehiculo();
  20. void imprimir(int año, char *propietario);
  21. int llenarDepo();
  22. int acelerar(int kphMas);
  23. int frenar(int kphMenos);
  24. void nPropietario(char* propietario);
  25. };
  26.  
  27. vehiculo::vehiculo(int veloActualual, int liDepo, int capDepo, int año)
  28. {
  29.  
  30. }
  31.  
  32. vehiculo::~vehiculo()
  33. {
  34. }
  35. int vehiculo::llenarDepo()
  36. {
  37. for(; liDepo <= capDepo; liDepo++)
  38. {
  39. cout << "El deposito esta lleno" << endl;
  40. }
  41. return liDepo;
  42. }
  43.  
  44. void vehiculo::imprimir(int año, char*propietario)
  45. {
  46. cout << "La velocidad actual es: "<< veloActual << endl;
  47. cout << "El año del coche es: " << año << endl;
  48. cout << "En el deposito hay: " << liDepo << endl;
  49. cout << "El nombre del propietario es: " << *propietario << endl;
  50. }
  51.  
  52.  
  53.  
  54. int vehiculo::acelerar(int kphMas)
  55. {
  56. cout << "Estas acelerando!" << endl;
  57. veloActual = veloActual + kphMas;
  58. liDepo = liDepo - kphMas / 2;
  59. cout << "Su velocidad actual es: " << veloActual << endl;
  60. cout << "Su deposito actual es: " << liDepo << endl;
  61. return veloActual;
  62. return liDepo;
  63. }
  64.  
  65. int vehiculo::frenar(int kphMenos)
  66. {
  67. if( veloActual >= 0)
  68. {
  69. cout << "Estas frenando!" << endl;
  70. veloActual = veloActual - kphMenos;
  71. cout << "Su velocidad actual es: " << veloActual << endl;
  72. }
  73. else
  74. {
  75. cout << "Ya estas parado!" << endl;
  76. }
  77. return veloActual;
  78. }
  79.  
  80. void vehiculo::nPropietario( char* propietario)
  81. {
  82. propietario[0] = 'P';
  83. propietario[1] = 'e';
  84. propietario[2] = 'p';
  85. propietario[3] = 'e';
  86. cout << "EL nombre del propietario es: " << *propietario << endl;
  87. }
  88.  
  89. int main()
  90. {
  91. vehiculo mercedes(0, 60, 60, 1990);
  92. mercedes.acelerar(50);
  93. mercedes.acelerar(50);
  94. mercedes.acelerar(50);
  95. mercedes.frenar(20);
  96. mercedes.frenar(65);
  97. mercedes.frenar(65);
  98. mercedes.frenar(10);
  99. system("pause");
  100. return 0;
  101. }


En línea

maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #1 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....



En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #2 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.
En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #3 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..

Código
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. class vehiculo
  5. {
  6. private:
  7. int veloInicial;
  8. int añoInicial;
  9. int capDepoInicial;
  10. int lidepoInicial;
  11. int litros;
  12. int kphMas;
  13. int kphMenos;
  14. int veloActual;
  15. int capaDepo;
  16. int año;
  17. int capDepo;
  18. int liDepo;
  19. public:
  20. vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial);
  21. ~vehiculo();
  22. void imprimir();
  23. void llenarDepo();
  24. void acelerar(int kphMas);
  25. void frenar(int kphMenos);
  26. };
  27.  
  28. vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial)
  29. {
  30. veloActual = veloInicial;
  31. liDepo = liInicial;
  32. capDepo = capDepoInicial;
  33. año = añoInicial;
  34.  
  35. }
  36.  
  37. vehiculo::~vehiculo()
  38. {
  39. }
  40.  
  41. void vehiculo::llenarDepo()
  42. {
  43. for(; liDepo < capDepo; liDepo++)
  44. {
  45. }
  46. cout << "El deposito esta lleno" << endl << endl;
  47. }
  48.  
  49. void vehiculo::imprimir()
  50. {
  51. cout << "La velocidad actual es: "<< veloActual << endl;
  52. cout << "El año del coche es: " << año << endl;
  53. cout << "En el deposito hay: " << liDepo << endl;
  54. cout << "El nombre del propietario es: " << endl << endl;
  55. }
  56.  
  57.  
  58.  
  59. void vehiculo::acelerar(int kphMas)
  60. {
  61. if(liDepo > 0)
  62. {
  63. cout << "Estas acelerando!" << endl;
  64.    veloActual = veloActual + kphMas;
  65.    liDepo = liDepo - kphMas / 10;
  66.    cout << "Su velocidad actual es: " << veloActual << endl;
  67.    cout << "Su deposito actual es: " << liDepo << endl << endl;
  68. }
  69. else
  70. {
  71. cout << "El deposito esta vacio!" << endl << endl;
  72. }
  73. }
  74.  
  75. void vehiculo::frenar(int kphMenos)
  76. {
  77. if( veloActual - kphMenos > 0)
  78. {
  79. cout << "Estas frenando!" << endl;
  80. veloActual = veloActual - kphMenos;
  81. cout << "Su velocidad actual es: " << veloActual << endl << endl;
  82. }
  83. else
  84. {
  85. veloActual = 0;
  86. cout << "Ya estas parado!" << endl << endl;
  87. }
  88. }
  89.  
  90. int main()
  91. {
  92. vehiculo mercedes(0, 60, 60, 1990);
  93. mercedes.acelerar(50);
  94. mercedes.acelerar(50);
  95. mercedes.acelerar(50);
  96. mercedes.frenar(50);
  97. mercedes.frenar(50);
  98. mercedes.frenar(60);
  99. mercedes.acelerar(50);
  100. mercedes.llenarDepo();
  101. mercedes.imprimir();
  102. system("pause");
  103. return 0;
  104. }

Muchas gracias.
En línea

cazagavilan

Desconectado Desconectado

Mensajes: 82


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #4 en: 21 Abril 2012, 10:55 am »

Solucionado.

Código
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class vehiculo
  6. {
  7. private:
  8. char *cad;
  9. int veloInicial;
  10. int añoInicial;
  11. int capDepoInicial;
  12. int lidepoInicial;
  13. int litros;
  14. int kphMas;
  15. int kphMenos;
  16. int veloActual;
  17. int capaDepo;
  18. int año;
  19. int capDepo;
  20. int liDepo;
  21. public:
  22. vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial, const char *c);
  23. ~vehiculo();
  24. void imprimir();
  25. void llenarDepo();
  26. void acelerar(int kphMas);
  27. void frenar(int kphMenos);
  28. char *leer(char *c);
  29. };
  30. char propietario[] = "Jonathan Gavilan Mora";
  31.  
  32. vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial, const char *c)
  33. {
  34. veloActual = veloInicial;
  35. liDepo = liInicial;
  36. capDepo = capDepoInicial;
  37. año = añoInicial;
  38. cad = new char[strlen(c)+1];
  39. strcpy(cad, c);
  40.  
  41. }
  42.  
  43. vehiculo::~vehiculo()
  44. {
  45. delete [] cad;
  46. }
  47.  
  48. char *vehiculo::leer(char* c)
  49. {
  50. strcpy(c, cad);
  51. return c;
  52. }
  53.  
  54. void vehiculo::llenarDepo()
  55. {
  56. cout << "Estas llenando el deposito..." << endl;
  57. for(; liDepo < capDepo; liDepo++)
  58. {
  59. }
  60. cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl;
  61. }
  62.  
  63. void vehiculo::imprimir()
  64. {
  65. cout << "La velocidad actual es: "<< veloActual << endl;
  66. cout << "El año del coche es: " << año << endl;
  67. cout << "En el deposito hay: " << liDepo << endl;
  68. cout << "El nombre del propietario es: " << propietario <<endl << endl;
  69. }
  70.  
  71.  
  72.  
  73. void vehiculo::acelerar(int kphMas)
  74. {
  75. if(liDepo > 0)
  76. {
  77. cout << "Estas acelerando!" << endl;
  78.    veloActual = veloActual + kphMas;
  79.    liDepo = liDepo - kphMas / 10;
  80.    cout << "Su velocidad actual es: " << veloActual << endl;
  81.    cout << "Su deposito actual es: " << liDepo << endl << endl;
  82. }
  83. else
  84. {
  85. cout << "El deposito esta vacio!" << endl << endl;
  86. }
  87. }
  88.  
  89. void vehiculo::frenar(int kphMenos)
  90. {
  91. if( veloActual - kphMenos > 0)
  92. {
  93. cout << "Estas frenando!" << endl;
  94. veloActual = veloActual - kphMenos;
  95. cout << "Su velocidad actual es: " << veloActual << endl << endl;
  96. }
  97. else
  98. {
  99. veloActual = 0;
  100. cout << "Ya estas parado!" << endl << endl;
  101. }
  102. }
  103.  
  104. int main()
  105. {
  106. vehiculo mercedes(0, 60, 60, 1990, "Jonathan Gavilan Mora");
  107. mercedes.acelerar(50);
  108. mercedes.acelerar(50);
  109. mercedes.acelerar(50);
  110. mercedes.frenar(50);
  111. mercedes.frenar(50);
  112. mercedes.frenar(60);
  113. mercedes.acelerar(50);
  114. mercedes.llenarDepo();
  115. mercedes.imprimir();
  116. system("pause");
  117. return 0;
  118. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion orientada a objetos en php, ide
PHP
wizache 2 4,667 Último mensaje 11 Marzo 2008, 02:44 am
por [ Alberto]
[Fundamentos] Programación Orientada a Objetos
Programación General
AFelipeTrujillo 5 5,935 Último mensaje 3 Septiembre 2010, 20:16 pm
por AFelipeTrujillo
programacion orientada a objetos con C#
.NET (C#, VB.NET, ASP)
Bleach@lex 3 5,403 Último mensaje 21 Abril 2012, 19:55 pm
por Bleach@lex
Ayuda con Programacion Orientada a Objetos C++
Programación C/C++
ovg17 3 2,911 Último mensaje 27 Enero 2013, 01:42 am
por amchacon
ayuda con programación orientada a objetos c++
Programación C/C++
indict 0 2,266 Último mensaje 31 Marzo 2013, 00:17 am
por indict
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines