Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cazagavilan en 23 Abril 2012, 17:28 pm



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

Código
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. //Declaracion clase VEHICULO
  5. class vehiculo
  6. {
  7. protected:
  8. char *cad;
  9. int litros;
  10. int kphMas;
  11. int kphMenos;
  12. int veloActual;
  13. int capaDepo;
  14. int año;
  15. int capDepo;
  16. int liDepo;
  17. public:
  18. vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial, const char *c);
  19. ~vehiculo();
  20. void imprimir();
  21. void llenarDepo();
  22. void acelerar(int kphMas);
  23. void frenar(int kphMenos);
  24. char *leer(char *c);
  25. };
  26.  
  27. //Declaracion derivada MOTO
  28. class moto : public vehiculo
  29. {
  30. protected:
  31. int cilindrada;
  32. int cilinInicial;
  33. char *tipo;
  34. public:
  35. moto(int veloInicial,int liInicial, int capDepoInicial, int añoInicial,  int cilinInicial, const char* c, const char *c1);
  36. ~moto();
  37. char* leer1(char*c1);
  38. }
  39.  
  40. //Constructor VEHICULO
  41. vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int añoInicial, const char *c)
  42. {
  43. veloActual = veloInicial;
  44. liDepo = liInicial;
  45. capDepo = capDepoInicial;
  46. año = añoInicial;
  47. cad = new char[strlen(c)+1];
  48. strcpy(cad, c);
  49.  
  50. }
  51.  
  52. //Destructor VEHICULO
  53. vehiculo::~vehiculo()
  54. {
  55. delete [] cad;
  56. }
  57.  
  58. //Metodo leer VEHICULO
  59. char *vehiculo::leer(char* c)
  60. {
  61. strcpy(c, cad);
  62. return c;
  63. }
  64.  
  65. // Metodo llenar deposito  VEHICULO
  66. void vehiculo::llenarDepo()
  67. {
  68. cout << "Estas llenando el deposito..." << endl;
  69. for(; liDepo < capDepo; liDepo++)
  70. {
  71. }
  72. cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl;
  73. }
  74.  
  75. // Metodo imprimir VEHICULO
  76. void vehiculo::imprimir()
  77. {
  78. cout << "La velocidad actual es: "<< veloActual << endl;
  79. cout << "El año del coche es: " << año << endl;
  80. cout << "En el deposito hay: " << liDepo << endl;
  81. cout << "El nombre del propietario es: " << *cad <<endl << endl;
  82. }
  83.  
  84. // Metodo acelerar VEHICULO
  85. void vehiculo::acelerar(int kphMas)
  86. {
  87. if(liDepo > 0)
  88. {
  89. cout << "Estas acelerando!" << endl;
  90.    veloActual = veloActual + kphMas;
  91.    liDepo = liDepo - kphMas / 10;
  92.    cout << "Su velocidad actual es: " << veloActual << endl;
  93.    cout << "Su deposito actual es: " << liDepo << endl << endl;
  94. }
  95. else
  96. {
  97. cout << "El deposito esta vacio!" << endl << endl;
  98. }
  99. }
  100.  
  101. // Metodo frenar VEHICULO
  102. void vehiculo::frenar(int kphMenos)
  103. {
  104. if( veloActual - kphMenos > 0)
  105. {
  106. cout << "Estas frenando!" << endl;
  107. veloActual = veloActual - kphMenos;
  108. cout << "Su velocidad actual es: " << veloActual << endl << endl;
  109. }
  110. else
  111. {
  112. veloActual = 0;
  113. cout << "Ya estas parado!" << endl << endl;
  114. }
  115. }
  116.  
  117. // Constructor MOTO
  118. moto::moto(int veloInicial,int liInicial, int capDepoInicial, int añoInicial,  int cilinInicial,const char* c,  const char *c1):
  119. vehiculo( veloInicial,  liInicial,  capDepoInicial, añoInicial, *c)
  120. {
  121. veloActual = veloInicial;
  122. liDepo = liInicial;
  123. capDepo = capDepoInicial;
  124. año = añoInicial;
  125. cad = new char[strlen(c)+1];
  126. strcpy(cad, c);
  127. cilindrada = cilinInicial;
  128. tipo = new char[strlen(c1)+1];
  129. strcpy(tipo, c1);
  130. }
  131.  
  132. // Destructor Moto
  133. moto::~moto()
  134. {
  135. delete [] tipo;
  136. }
  137.  
  138. // Metodo leer MOTO
  139. char *moto::leer1(char* c1)
  140. {
  141. strcpy(c1, tipo);
  142. return c1;
  143. }
  144.  


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".
Código
  1. moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial,const char* c,  const char *c1):
  2. vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)

Aca está el código comentado:

Código
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. //Declaracion clase VEHICULO
  5. class vehiculo
  6. {
  7. protected:
  8. char *cad;
  9. int litros;
  10. int kphMas;
  11. int kphMenos;
  12. int veloActual;
  13. int capaDepo;
  14. int año; // Error por la letra Ñ
  15. int capDepo;
  16. int liDepo;
  17. public:
  18. vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c); // Error por la letra Ñ
  19. ~vehiculo();
  20. void imprimir();
  21. void llenarDepo();
  22. void acelerar(int kphMas);
  23. void frenar(int kphMenos);
  24. char *leer(char *c);
  25. };
  26.  
  27. //Declaracion derivada MOTO
  28. class moto : public vehiculo
  29. {
  30. protected:
  31. int cilindrada;
  32. int cilinInicial;
  33. char *tipo;
  34. public:
  35. moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial, const char* c, const char *c1); // Error por la letra Ñ
  36. ~moto();
  37. char* leer1(char*c1);
  38. }; // Faltaba el punto y coma
  39.  
  40. //Constructor VEHICULO
  41. vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c) // Error por la letra Ñ
  42. {
  43. veloActual = veloInicial;
  44. liDepo = liInicial;
  45. capDepo = capDepoInicial;
  46. año = anioInicial; // Error por la letra Ñ
  47. cad = new char[strlen(c)+1];
  48. strcpy(cad, c);
  49.  
  50. }
  51.  
  52. //Destructor VEHICULO
  53. vehiculo::~vehiculo()
  54. {
  55. delete [] cad;
  56. }
  57.  
  58. //Metodo leer VEHICULO
  59. char *vehiculo::leer(char* c)
  60. {
  61. strcpy(c, cad);
  62. return c;
  63. }
  64.  
  65. // Metodo llenar deposito  VEHICULO
  66. void vehiculo::llenarDepo()
  67. {
  68. cout << "Estas llenando el deposito..." << endl;
  69. for(; liDepo < capDepo; liDepo++)
  70. {
  71. }
  72. cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl;
  73. }
  74.  
  75. // Metodo imprimir VEHICULO
  76. void vehiculo::imprimir()
  77. {
  78. cout << "La velocidad actual es: "<< veloActual << endl;
  79. cout << "El año del coche es: " << año << endl; // Error por la letra Ñ
  80. cout << "En el deposito hay: " << liDepo << endl;
  81. cout << "El nombre del propietario es: " << *cad <<endl << endl;
  82. }
  83.  
  84. // Metodo acelerar VEHICULO
  85. void vehiculo::acelerar(int kphMas)
  86. {
  87. if(liDepo > 0)
  88. {
  89. cout << "Estas acelerando!" << endl;
  90.    veloActual = veloActual + kphMas;
  91.    liDepo = liDepo - kphMas / 10;
  92.    cout << "Su velocidad actual es: " << veloActual << endl;
  93.    cout << "Su deposito actual es: " << liDepo << endl << endl;
  94. }
  95. else
  96. {
  97. cout << "El deposito esta vacio!" << endl << endl;
  98. }
  99. }
  100.  
  101. // Metodo frenar VEHICULO
  102. void vehiculo::frenar(int kphMenos)
  103. {
  104. if( veloActual - kphMenos > 0)
  105. {
  106. cout << "Estas frenando!" << endl;
  107. veloActual = veloActual - kphMenos;
  108. cout << "Su velocidad actual es: " << veloActual << endl << endl;
  109. }
  110. else
  111. {
  112. veloActual = 0;
  113. cout << "Ya estas parado!" << endl << endl;
  114. }
  115. }
  116.  
  117. // Constructor MOTO
  118. moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial,const char* c,  const char *c1): // Error por la letra Ñ
  119. vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c) // Error por la letra Ñ
  120. {
  121. veloActual = veloInicial;
  122. liDepo = liInicial;
  123. capDepo = capDepoInicial;
  124. año = anioInicial; // Error por la letra Ñ
  125. cad = new char[strlen(c)+1];
  126. strcpy(cad, c);
  127. cilindrada = cilinInicial;
  128. tipo = new char[strlen(c1)+1]; // habia una "m" al comienzo
  129. strcpy(tipo, c1);
  130. }
  131.  
  132. // Destructor Moto
  133. moto::~moto()
  134. {
  135. delete [] tipo;
  136. }
  137.  
  138. // Metodo leer MOTO
  139. char *moto::leer1(char* c1)
  140. {
  141. strcpy(c1, tipo);
  142. return c1;
  143. }
  144.  
  145. int main(){
  146. return 0;
  147. }
  148.  


Título: Re: herencia
Publicado por: cazagavilan en 23 Abril 2012, 19:14 pm
Muchas gracias lo probare!