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);
}