Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Validar un parámetro float

Estas en el tema de Validar un parámetro float en el foro de C/C++ en Foros del Web. Hola: Otra de mis dudas, de esas que me parecen muy tontas y luego no le veo una solución aceptable. Tengo una función miembro de ...
  #1 (permalink)  
Antiguo 21/02/2014, 09:02
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Validar un parámetro float

Hola:

Otra de mis dudas, de esas que me parecen muy tontas y luego no le veo una solución aceptable.

Tengo una función miembro de una clase para dar un valor a un miembro float.

Código C++:
Ver original
  1. void SetCantidad (float C) {Cantidad=C;}

Pero quiero que la función me haga la validación, para asegurarse de que se ha introducido un dato numérico.

He visto que aunque cin se "traga" en principio cualquier valor, y le hace un casting, se puede leer el fail que da, y en base a eso controlar si el valor introducido es válido o no, pero en principio, este sistema obligaría a que la comprobación se hiciera antes de hacer la llamada al método, y me gustaría que fuera el propio método el que hiciera tal comprobación, ya que entiendo que es parte de su misión.

Otra opción, que funcionaría, sería hacer la llamada así:

Código C++:
Ver original
  1. void SetCantidad (char* C){}
Y luego a esa cadena sí le podría hacer comprobaciones, y después pasarla a float, pero me parece algo enrevesado y chapucero.

Y no veo la forma de hacer la comprobación dentro de la función.
¿Alguna ayuda?
  #2 (permalink)  
Antiguo 21/02/2014, 09:55
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Validar un parámetro float

Si declaras que un metodo recibe un float, el objeto recibirá un float. Toda conversion se hará antes, sea esta explicita o no.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 21/02/2014, 10:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Validar un parámetro float

Hola: entonces tengo que hacer la validación antes, si o si.
Pero...¿esto no va un poco en contra del paradigma de la orientación a objetos?

Quiero decir, se supone que el método SetCantidad(float) ha de ser capaz de protegerse de entradas no válidas (de hecho, ese es uno de los motivos por el que los miembros de una clase no son accesibles de forma directa, si no me equivoco), pero al mismo tiempo han de ser autónomos.
Entonces, si yo delego la validación del float a un proceso previo....¿no estoy yendo en contra de la filosofía POO?

Gracias, como siempre!
  #4 (permalink)  
Antiguo 21/02/2014, 12:20
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Validar un parámetro float

No necesitas chequear dentro del metodo que lo recibido es un float.
Al declararlo float obligas al compilador y al cargador a hacer que el objeto reciba un float.

No tiene sentido hacer chequeo alguno adentro del metodo.
(El que tu justo antes de invocar el metodo lo hayas leido del teclado es un accidente. No tiene por que ser así.)

Distinto es que se provea de un metodo cuya mision es hacer un cast hacia el float interno, pero no es este el caso.
__________________
Visita mi perfil en LinkedIn
  #5 (permalink)  
Antiguo 21/02/2014, 14:00
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Validar un parámetro float

Cita:
Iniciado por dehm Ver Mensaje
... se supone que el método SetCantidad(float) ha de ser capaz de protegerse de entradas no válidas (de hecho, ese es uno de los motivos por el que los miembros de una clase no son accesibles de forma directa, si no me equivoco)
A lo q te refieres es al concepto de encapsulamiento y tienes razón, la idea es evitar entradas q hagan q el objeto quede en un estado inválido. Pero en tu caso (q sea float) eso lo puedes lograr en la propia declaración del método.
Un ejemplo de "protección" sería , asumiendo q la cantidad no puede ser menor q cero, que el método SetCantidad(float) hiciera las validaciones necesarias para q esto no suceda:
Código C++:
Ver original
  1. void SetCantidad (float C)
  2. {
  3.            if ( C >= 0 )  
  4.                           Cantidad=C;
  5.            else
  6.                         // Lanzar error
  7. }

slds;

nup_
  #6 (permalink)  
Antiguo 24/02/2014, 06:22
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Validar un parámetro float

Vale, ya me ha quedado claro.
Gracias a ambos!

Etiquetas: float, funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:26.