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
Ir a la versión completa