Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿polimorfismo en c++ error en tiempo de ejecucion?

Estas en el tema de ¿polimorfismo en c++ error en tiempo de ejecucion? en el foro de C/C++ en Foros del Web. Hola a todos, que tal? estuve estudiando c++ y hay un problema que no puedo resolver. Es un poco complejo por que el compilador no ...
  #1 (permalink)  
Antiguo 21/02/2012, 16:07
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta ¿polimorfismo en c++ error en tiempo de ejecucion?

Hola a todos, que tal? estuve estudiando c++ y hay un problema que no puedo resolver. Es un poco complejo por que el compilador no da error, sin embargo cuando ejecuto el programa, salta un mensaje en tiempo de ejecución que dice " violación de memoria" necesitaría si por favor, alguien me ayuda a encontrar el error, aquí el código:

clase1.h
------------
Código:
#ifndef CLASE1_H
#define CLASE1_H

#include<string>
using std::string;

class clase1//clase abstracta
{
public:
clase1(string);
virtual ~clase1();
void setMensaje(string);
string getMensaje();
virtual string imprimirMensaje();
private:
string mensaje;
};

#endif //CLASE1_H
clase1.cpp
-----------------

Código:
#include<iostream>
using std::cout;
using std::cin;
using std::endl;

#include<iomanip>
using std::setw;


#include"clase1.h"

clase1::clase1(string msj)
{
setMensaje(msj);
}

void clase1::setMensaje(string msj)
{
mensaje = msj;
}

string clase1::getMensaje()
{
return mensaje;
}

string clase1::imprimirMensaje()
{
cout << "El mensaje es: \n" << setw(25) << getMensaje() << "objeto de: clase1" << endl;

}
clase1::~clase1()
{

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

Código:
#ifndef CLASE2_H
#define CLASE2_H

#include<string>
using std::string;

#include"clase1.h"

class clase2 : public clase1
{
public:
clase2(string);
virtual ~clase2();
string imprimirMensaje();

};
#endif //CLASE2_H
clase2.cpp
--------------------
Código:
#include<iostream>
using std::cout;
using std::cin;
using std::endl;

#include<iomanip>
using std::setw;

#include"clase2.h"

clase2::clase2(string msj) : clase1(msj)
{

}

string clase2::imprimirMensaje()
{
cout << "El mensaje es: \n" << setw(25) << getMensaje() << "objeto de: clase2" << endl;

}
clase2::~clase2()
{

}

y finalmente el programa donde creo esta el error:

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

Código:
#include"clase2.h"
#include<iostream>
using std::cin;
using std::cout;

int main()
{
clase1 *sistema1Ptr = 0;
clase2 *sistema2Ptr = 0;

clase1 sistema1("HOLA");
sistema1Ptr = &sistema1;
sistema1Ptr->imprimirMensaje();

//sistema1Ptr = 0;
clase2 sistema2("HOLA2");
sistema1Ptr = &sistema2;
sistema1Ptr->imprimirMensaje();


cin.get();

return 0;
}
Aclaro este programa es a modo de aprendizaje, en si solo muestra un mensaje, si alguien me puede indicar donde y como corregir el error se lo agradecería mucho, Saludos!!

Última edición por fabian_n7; 21/02/2012 a las 16:20
  #2 (permalink)  
Antiguo 23/02/2012, 16:20
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 2 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
  #3 (permalink)  
Antiguo 25/02/2012, 09:00
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: ¿polimorfismo en c++ error en tiempo de ejecucion?

Fíjate en la declaración del método "imprimirMensaje", tienes especificado un valor de retorno de tipo string.
  #4 (permalink)  
Antiguo 25/02/2012, 22:55
Usuario no validado
 
Fecha de Ingreso: febrero-2012
Mensajes: 24
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: ¿polimorfismo en c++ error en tiempo de ejecucion?

Muchisimas gracias fightmx!! efectivamente el error era ese, al principio tenia pensado devolver un string con la funcion miembro imprimirMensaje, pero despues cambie el cuerpo de la funcion y olvide cambiar el valor de retorno! gracias nuevamente, ahora puedo seguir estudiando en paz jaja Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:02.