Programación General > C/C++

 Problemas en class

(1/1)

o.ficu:
Hola a todos, espero puedan ayudarme, me estoy volviendo loco con esto, les pongo el programa para que me puedan entender:

--- Código: C ---#include<iostream>#include<stdlib.h>#include<math.h>#include<iomanip>using namespace std;#define PI 3.1416 class circulo{      protected:              int r;      public:             circulo(){r=0;}             circulo(int a){r=a;}             int getradio(){return r;}             float getarea(){return PI*r*r;}}; class ConoCircularRecto: public circulo{      private:              int h,g;      public:             ConoCircularRecto(){h=0;g=0;}             ConoCircularRecto(int rad,int alt);             ~ConoCircularRecto(){}             int  getaltura(){return h;}             float CalcularGeneratriz();             void VerDatos();             void AreaCono();             void VolumenCono();             friend ConoCircularRecto LEER(ConoCircularRecto P);             }; ConoCircularRecto::ConoCircularRecto(int rad,int alt){             r=rad;h=alt;}           float ConoCircularRecto::CalcularGeneratriz(){          return (sqrt((r*r)+(h*h)));} void ConoCircularRecto::VerDatos(){     cout<<"nDATOS DEL CONO CIRCULAR RECTO"<<endl;     cout<<"Radiott:"<<getradio()<<" unidades";     cout<<"nAlturatt:"<<h<<" unidades";     cout<<"nGeneratrizt:"<<CalcularGeneratriz()<<" unidades";} void ConoCircularRecto::AreaCono(){    float area;     area=(getarea())+(PI*getradio()*g);     cout<<"nEl Area est:"<<setprecision(2)<<setiosflags(ios::fixed|ios::showpoint)<<area<<" unidades cuadradas";} void ConoCircularRecto::VolumenCono(){    float volumen;     volumen=(PI*getradio()*getradio()*h)/3;     cout<<"nEl Volumen est:"<<volumen<<" unidades cubicas"<<endl;}  ConoCircularRecto LEER(ConoCircularRecto ); ConoCircularRecto LEER(ConoCircularRecto P){         int a,b;     cout<<"nRadiott:";cin>>a;     cout<<"nAlturatt:";cin>>b;     ConoCircularRecto P(a,b);     return P;} main(){   ConoCircularRecto P(5,12);    P.CalcularGeneratriz();    P.VerDatos();    P.AreaCono();    P.VolumenCono();    cout<<"LECTURA DE DATOS"<<endl;    LEER(P);  //debe retornar el nuevo P con los valores pedidos en la función LEER    P.VerDatos();    P.AreaCono();    P.VolumenCono();     system("PAUSE");    return 0;} 
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:
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++ ---void LEER(ConoCircularRecto &p){         int a,b;     cout<<"nRadiott:";cin>>a;     cout<<"nAlturatt:";cin>>b;     p.set(a, b);} 

o.ficu:
Muchas gracias por la ayuda!!

Eternal Idol:
De nadas  :good:

Navegación

[0] Índice de Mensajes

Ir a la versión completa