Programación General > C/C++
Problema de novato con clases
JuaNiYoT:
Gracias por vuestras respuestas, pero la pregunta o no era esa o es que no se puede hacer como yo pienso. Yo lo que quiero es poder almacenar en el tipo enumerado el valor que coges. Por ejemplo
para el tipo de estado civil del que hablo, hacer algo así:
civil=0; //suponía que así guardaría el estado civil para el objeto que esté usando. ¿Como haría eso? pues he visto que no se le pueden asignar ni enteros ni string... por lo tanto estoy un poco perdido. Para que sirve entonces el enum?
ProfesorX:
--- Cita de: "JuaNiYoT" ---Yo lo que quiero es poder almacenar en el tipo enumerado el valor que coges.
--- Fin de la cita ---
Supongo que tu querias algo como que estado_civil.soltero = "Soltero", y no, no es asi como funciona el enum. Como te dije antes, el enum internamente se guarda como si fuera un valor de tipo entero, con valores que comienzan en cero y aumentan en uno de forma consecutiva (0,1,2,3, etc) a menos que en la declaracion le pongas explicitamente que valores tendra el enum.
--- Citar ---suponía que así guardaría el estado civil para el objeto que esté usando. ¿Como haría eso?
--- Fin de la cita ---
Bueno, hay varias formas de hacerlo, la forma como yo lo haria seria algo parecido a como lo hizo Leber, usando switch:
--- Código: C++ --- int main(){ int civil; Cliente* cliente; cliente = new Cliente(); cout << "Estado civil (0=Soltero, 1=Casado, 2=Viudo, 3=Divorciado): "; cin >> civil; switch (civil) { case Cliente::soltero: cliente->setEstado_civil(Cliente::soltero); break; case Cliente::casado: cliente->setEstado_civil(Cliente::casado); break; case Cliente::viudo: cliente->setEstado_civil(Cliente::viudo); break; case Cliente::divorciado: cliente->setEstado_civil(Cliente::divorciado); break; } return 0;}
De todas formas, necesitarias validar tu entrada para que en civil no guardes valores fuera del rango, es decir, menores a cero o mayores a 3 :)
--- Citar ---Para que sirve entonces el enum?
--- Fin de la cita ---
Bueno, tratare de explicar un poco a ver si comprendes mejor, como dije antes el enum internamente se guarda como un valor de tipo entero. Te permite definir constantes de manera consecutiva y de forma mas facil. Si declaras manualmente tus constantes harias algo como esto:
--- Código: C++ --- const int soltero = 0;const int casado = 1;const int viudo = 2;const int divorciado = 3;
A la vez funciona como tipo, lo cual te permite definir una variable de tipo enum, al usar ese tipo, hace que el compilador genere errores cuando tratas de asignar a la variable un tipo inadecuado, ejemplo:
--- Código: C++ --- // esta linea generara un errorcliente->setEstado_civil(0);// Esta linea compilara correctamentecliente->setEstado_civil(Cliente::soltero);
Aunque puedes hacer un type cast para asignar, ya que un enum y un int son compatibles, pero deberas tener cuidado para no asignar un valor no valido.
Ejemplo de type cast (algo rebuscado):
--- Código: C++ --- Cliente::estado_civil edo_civ; civil = 0; // type cast edo_civ = (Cliente::estado_civil) civil; cliente->setEstado_civil(edo_civ);
En el caso anterior, un valor no valido seria hacer civil = 4.
Ojala y te haya quedado un poco mas claro.
Saludos :)
JuaNiYoT:
Perfecto, ahora si me he enterado de todo. Muchas gracias profesor X por su ayuda y a todos los demás claro está. Voy a probarlo haber que tal ahora. Un saludo.
Navegación
[*] Página Anterior
Ir a la versión completa