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);
void LEER(ConoCircularRecto &p)
{    
     int a,b;
     cout<<"nRadiott:";cin>>a;
     cout<<"nAlturatt:";cin>>b;
     p.set(a, b);
}