• Viernes 8 de Noviembre de 2024, 23:18

Autor Tema:  Problemas en class  (Leído 1181 veces)

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Problemas en class
« en: Jueves 26 de Noviembre de 2009, 05:48 »
0
Hola a todos, espero puedan ayudarme, me estoy volviendo loco con esto, les pongo el programa para que me puedan entender:
Código: C
  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. #include<iomanip>
  5. using namespace std;
  6. #define PI 3.1416
  7.  
  8. class circulo{
  9.       protected:
  10.               int r;
  11.       public:
  12.              circulo(){r=0;}
  13.              circulo(int a){r=a;}
  14.              int getradio(){return r;}
  15.              float getarea(){return PI*r*r;}
  16. };
  17.  
  18. class ConoCircularRecto: public circulo{
  19.       private:
  20.               int h,g;
  21.       public:
  22.              ConoCircularRecto(){h=0;g=0;}
  23.              ConoCircularRecto(int rad,int alt);
  24.              ~ConoCircularRecto(){}
  25.              int  getaltura(){return h;}
  26.              float CalcularGeneratriz();
  27.              void VerDatos();
  28.              void AreaCono();
  29.              void VolumenCono();
  30.              friend ConoCircularRecto LEER(ConoCircularRecto P);
  31.              
  32. };
  33.  
  34. ConoCircularRecto::ConoCircularRecto(int rad,int alt)
  35. {      
  36.        r=rad;h=alt;
  37. }
  38.  
  39.          
  40. float ConoCircularRecto::CalcularGeneratriz()
  41. {    
  42.       return (sqrt((r*r)+(h*h)));
  43. }
  44.  
  45. void ConoCircularRecto::VerDatos()
  46. {
  47.      cout<<"nDATOS DEL CONO CIRCULAR RECTO"<<endl;
  48.      cout<<"Radiott:"<<getradio()<<" unidades";
  49.      cout<<"nAlturatt:"<<h<<" unidades";
  50.      cout<<"nGeneratrizt:"<<CalcularGeneratriz()<<" unidades";
  51. }
  52.  
  53. void ConoCircularRecto::AreaCono()
  54. {    float area;
  55.      area=(getarea())+(PI*getradio()*g);
  56.      cout<<"nEl Area est:"<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint)<<area<<" unidades cuadradas";
  57. }
  58.  
  59. void ConoCircularRecto::VolumenCono()
  60. {    float volumen;
  61.      volumen=(PI*getradio()*getradio()*h)/3;
  62.      cout<<"nEl Volumen est:"<<volumen<<" unidades cubicas"<<endl;
  63. }
  64.  
  65.  
  66. ConoCircularRecto LEER(ConoCircularRecto );
  67.  
  68. ConoCircularRecto LEER(ConoCircularRecto P)
  69. {    
  70.      int a,b;
  71.      cout<<"nRadiott:";cin>>a;
  72.      cout<<"nAlturatt:";cin>>b;
  73.      ConoCircularRecto P(a,b);
  74.      return P;
  75. }
  76.  
  77. main()
  78. {   ConoCircularRecto P(5,12);
  79.     P.CalcularGeneratriz();
  80.     P.VerDatos();
  81.     P.AreaCono();
  82.     P.VolumenCono();
  83.     cout<<"LECTURA DE DATOS"<<endl;
  84.     LEER(P);  //debe retornar el nuevo P con los valores pedidos en la función LEER
  85.     P.VerDatos();
  86.     P.AreaCono();
  87.     P.VolumenCono();
  88.  
  89.     system("PAUSE");
  90.     return 0;
  91. }
  92.  

Mi problema es que luego de llamar a la función LEER, me sigue dando los resultados de la primera clase P osea radio 5 y altura 12, espero puedan orientarme y darme la solución a este problema, gracias a todos de antemano.
Oliver

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas en class
« Respuesta #1 en: Jueves 26 de Noviembre de 2009, 13:42 »
0
Para empezar no se como te compila:
ConoCircularRecto LEER(ConoCircularRecto P)
...
...
...
ConoCircularRecto P(a,b);
return P;

No veo razon tampoco para esperar que el objeto P de la funcion main sea modificado en lo absoluto cuando llamas a LEER, salvo los nombres de las variables poco descriptivos no guardan ninguna relacion entre ellos, asi te funcionaria:

P = LEER(P);

Igual no es una buena idea retornar una variable local, es preferible que pases el objeto por referencia  y trabajes con el (nunca estan de mas los setters).

Asi podrias dejar LEER(P);

Código: C++
  1. void LEER(ConoCircularRecto &p)
  2. {    
  3.      int a,b;
  4.      cout<<"nRadiott:";cin>>a;
  5.      cout<<"nAlturatt:";cin>>b;
  6.      p.set(a, b);
  7. }
  8.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Problemas en class
« Respuesta #2 en: Jueves 26 de Noviembre de 2009, 17:44 »
0
Muchas gracias por la ayuda!!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problemas en class
« Respuesta #3 en: Jueves 26 de Noviembre de 2009, 17:46 »
0
De nadas  :good:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.