Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cazagavilan en 21 Abril 2012, 00:17 am



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!
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. }


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..

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.


Título: Re: Programacion orientada a objetos
Publicado por: cazagavilan 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. }