• Sábado 14 de Diciembre de 2024, 10:26

Autor Tema:  Problema En El Destructor?  (Leído 843 veces)

DOLOS

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema En El Destructor?
« en: Sábado 6 de Mayo de 2006, 21:43 »
0
Bueno pues resulta que estoy haciendo un pequeño programa usando herencia de clases, es una tarea que tengo por ahi. Al parecer la herencia funciona muy bien  :D y el programa corre como deberia.... hasta que llega el momento de finalizar  <_<  Resulta que al final te pide que presiones cualquier tecla para salir, pues bien, la presionas y sale  :D  pero sale tambien del editor de C++´ :(  El programa no marca errores de sintaxis ni nada de eso, asi que supongo que es una excepcion, y ya que no veo donde pueda estar dentro del codigo que he escrito, se me ocurre que se encuentre al momento de destruir los objetos (no hay destructores definidos) pero pues me gustaria ver que es lo que pasa, si alguien pudiera ayudarme. Gracias de Antemano.

Código: Text
  1.  
  2. /*Programa de herencia con dos niveles de derivacion*/
  3.  
  4. #include <conio.h>
  5. #include <iostream.h>
  6. #include <iomanip.h>
  7. #include <ctype.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <math.h>
  11.  
  12. class figura{};
  13.  
  14. class triangulo:public figura
  15. {
  16.  protected:
  17.   float base,altura,area;
  18.   char *tipo;
  19.  public:
  20.   void calc();
  21.   void show();
  22. };
  23.  
  24. class rectangulo:public triangulo
  25. {
  26.  public:
  27.   void datos(char *clase);
  28. };
  29.  
  30. class equilatero:public triangulo
  31. {
  32.  private:
  33.   float lado;
  34.  public:
  35.   void datos(char *clase);
  36. };
  37.  
  38. void main()
  39. {
  40.  clrscr(); textbackground(1); textcolor(15);
  41.  char *user,*tipo,dato[10],rsp; int opc=0;
  42.  rectangulo tri1; equilatero tri2;
  43.  gotoxy(20,3); cout << "PROGRAMA PARA CALCULAR EL AREA DE UN TRIANGULO";
  44.  gotoxy(10,5); cout << "Teclee el nombre del usuario:";
  45.  gotoxy(12,6); cin.getline(user,30);
  46.  do
  47.  {
  48.   clrscr();
  49.   gotoxy(20,3); cout << "PROGRAMA PARA CALCULAR EL AREA DE UN TRIANGULO";
  50.   gotoxy(30,5); cout << "MENU";
  51.   gotoxy(25,7); cout << "1. Equilatero";
  52.   gotoxy(25,9); cout << "2. Rectangulo";
  53.   do
  54.   {
  55.    gotoxy(10,11); cout << user << ", teclea la opcion que desees: ";
  56.    cin.getline(dato,10); opc=atoi(dato);
  57.   }while(opc<=0||opc>2);
  58.   switch(opc)
  59.   {
  60.    case(1):{ strcpy(tipo,"EQUILATERO");
  61.        tri2.datos(tipo);
  62.        tri2.calc();
  63.        tri2.show();
  64.        break;
  65.      }
  66.    case(2):{ strcpy(tipo,"RECTANGULO");
  67.        tri1.datos(tipo);
  68.        tri1.calc();
  69.        tri1.show();
  70.        break;
  71.      }
  72.   }
  73.   gotoxy(15,20); cout << user << ", desea calcular otro triangulo?S/N";
  74.   rsp=getch();
  75.  }while(toupper(rsp)=='S');
  76.  gotoxy(15,22); cout << "Presione cualquier tecla para salir...";
  77.  getch();
  78. }
  79.  
  80. void triangulo::calc()
  81. {
  82.  area=(base*altura)/2;
  83. }
  84.  
  85. void triangulo::show()
  86. {
  87.  clrscr();
  88.  gotoxy(20,3); cout << "RESULTADOS DEL TRIANGULO " << tipo;
  89.  cout << setiosflags(ios::fixed) << setprecision(2);
  90.  gotoxy(5,5); cout << "BASE"; gotoxy(5,7); cout << base;
  91.  gotoxy(15,5); cout << "ALTURA"; gotoxy(15,7); cout << altura;
  92.  gotoxy(30,5); cout << "AREA"; gotoxy(30,7); cout << area;
  93. }
  94.  
  95. void rectangulo::datos(char *clase)
  96. {
  97.  strcpy(tipo,clase);
  98.  clrscr(); gotoxy(20,3); cout << "DATOS DEL TRIANGULO " << clase;
  99.  gotoxy(15,5); cout << "Deme la longitud del cateto A: ";
  100.  cin >> base;
  101.  gotoxy(15,7); cout << "Deme la lungitud del cateto B: ";
  102.  cin >> altura;
  103. }
  104.  
  105. void equilatero::datos(char *clase)
  106. {
  107.  strcpy(tipo,clase);
  108.  clrscr(); gotoxy(20,3); cout << "DATOS DEL TRIANGULO " << clase;
  109.  gotoxy(15,5); cout << "Deme la longitud del lado: ";
  110.  cin >> lado;
  111.  base=lado;
  112.  altura=sqrt(pow(lado,2)-pow((base/2),2));
  113. }
  114.  
  115.  

DOLOS

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema En El Destructor?
« Respuesta #1 en: Domingo 21 de Mayo de 2006, 09:09 »
0
Nadie ha contestado  :( ahora se me ocurre... no soy muy bueno con apuntadores... sera eso el error? :rolleyes:

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Problema En El Destructor?
« Respuesta #2 en: Lunes 22 de Mayo de 2006, 00:04 »
0
Lo que se me ocurre rápido es que ejecutes el programa desde la ventana de comandos, creo que ésta no se cerrará y probablemente puedas ver algún mensaje de finalización del programa.

También, mirando el código no me agrada mucho la instrucción strcpy( tipo, "ALGO" ); siendo char *tipo (puesto que el primer parámetro de strcpy debe ya tener suficiente espacio para recibir la cadena), en muchas ocasiones me ha dado problemas y he preferido usar char tipo[VALOR_CONSTANTE];

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip