Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/02/2012, 16:20
fabian_n7
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: ¿polimorfismo en c++ error en tiempo de ejecucion?

Estuve chequeando por todo Google, pero la verdad no pude encontrar nada acerca del error particular que se da al ejecutar el programa. Si alguien puede probarlo e interpretar cual puede estar siendo el error, me sería de gran ayuda, ya que lo verificado muchas veces, buscado información al respecto (incluido libros) pero no encuentro el error, como aclare en el post anterior, el compilador indica que no hay ningún error de sintaxis, el mensaje de error se produce en tiempo de ejecución que es cuando se hace efectivo el polimorfismo.

Espero puedan ayudarme con el tema ya que agote todas las vías y no pude resolverlo, De Ante mano muchas gracias!

Disculpen, soy nuevo en el foro, edito el codigo con las etiquetas correspondientes para que sea mas legible para todos:

clase1.h
------------
Código:

Código C++:
Ver original
  1. #ifndef CLASE1_H
  2. #define CLASE1_H
  3.  
  4. #include<string>
  5. using std::string;
  6.  
  7. class clase1//clase abstracta
  8. {
  9. public:
  10. clase1(string);
  11. virtual ~clase1();
  12. void setMensaje(string);
  13. string getMensaje();
  14. virtual string imprimirMensaje();
  15. private:
  16. string mensaje;
  17. };
  18.  
  19. #endif //CLASE1_H

clase1.cpp
-----------------

Código:

Código C++:
Ver original
  1. #include<iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include<iomanip>
  7. using std::setw;
  8.  
  9.  
  10. #include"clase1.h"
  11.  
  12. clase1::clase1(string msj)
  13. {
  14. setMensaje(msj);
  15. }
  16.  
  17. void clase1::setMensaje(string msj)
  18. {
  19. mensaje = msj;
  20. }
  21.  
  22. string clase1::getMensaje()
  23. {
  24. return mensaje;
  25. }
  26.  
  27. string clase1::imprimirMensaje()
  28. {
  29. cout << "El mensaje es: \n" << setw(25) << getMensaje() << "objeto de: clase1" << endl;
  30.  
  31. }
  32. clase1::~clase1()
  33. {
  34.  
  35. }

clase2.h
---------------------

Código:

Código C++:
Ver original
  1. #ifndef CLASE2_H
  2. #define CLASE2_H
  3.  
  4. #include<string>
  5. using std::string;
  6.  
  7. #include"clase1.h"
  8.  
  9. class clase2 : public clase1
  10. {
  11. public:
  12. clase2(string);
  13. virtual ~clase2();
  14. string imprimirMensaje();
  15.  
  16. };
  17. #endif //CLASE2_H
clase2.cpp
--------------------
Código:

Código C++:
Ver original
  1. #include<iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include<iomanip>
  7. using std::setw;
  8.  
  9. #include"clase2.h"
  10.  
  11. clase2::clase2(string msj) : clase1(msj)
  12. {
  13.  
  14. }
  15.  
  16. string clase2::imprimirMensaje()
  17. {
  18. cout << "El mensaje es: \n" << setw(25) << getMensaje() << "objeto de: clase2" << endl;
  19.  
  20. }
  21. clase2::~clase2()
  22. {
  23.  
  24. }


y finalmente el programa donde creo esta el error:

programa.cpp
--------------------------

Código:
Código C++:
Ver original
  1. #include"clase2.h"
  2. #include<iostream>
  3. using std::cin;
  4. using std::cout;
  5.  
  6. int main()
  7. {
  8. clase1 *sistema1Ptr = 0;
  9. clase2 *sistema2Ptr = 0;
  10.  
  11. clase1 sistema1("HOLA");
  12. sistema1Ptr = &sistema1;
  13. sistema1Ptr->imprimirMensaje();
  14.  
  15. //sistema1Ptr = 0;
  16. clase2 sistema2("HOLA2");
  17. sistema1Ptr = &sistema2;
  18. sistema1Ptr->imprimirMensaje();
  19.  
  20.  
  21. cin.get();
  22.  
  23. return 0;
  24. }

Nuevamente Gracias :)

Última edición por fabian_n7; 23/02/2012 a las 16:35 Razón: Editado para mejorar la legibilidad del código