Título: [Ayuda] ¿Cuál es el problema en el código? Publicado por: Funebrer0 en 27 Abril 2015, 02:32 am Bueno tengo que hacer un trabajo práctico para Paradigmas de Programación en C++.
La cosa es que me surgió un problema y ya llevo todo el día buscando una solución que hasta ahora no encontré. El código es el siguiente: Código: #include <iostream> Como verán (si lo compilan) a la hora de mostrar el horario de entrada y el horario de salida me tira cualquier valor. ¿Alguna idea de como arreglarlo? Gracias. Título: Re: [Ayuda] ¿Cuál es el problema en el código? Publicado por: eferion en 27 Abril 2015, 09:27 am Código
En ese constructor estás creando dos variables locales llamdas "HorarioEntrada" y "HorarioSalida". Casualmente estos nombres coinciden con el de las variables miembro de "Empleado"... pero no son iguales. El resultado es que las variables miembro no van a almacenar esos datos. Tienes dos opciones: 1. Mueves esas inicializaciones de sitio: Código
2. Realizas una asignación: Código
Un saludo. Título: Re: [Ayuda] ¿Cuál es el problema en el código? Publicado por: Funebrer0 en 27 Abril 2015, 11:08 am Gracias, me sirvió! También encontré otra solución utilizando el puntero this.
Ahora si bien el programa me funciona perfectamente, no termino de entenderlo bien. ¿Me podrías explicar un poco mas detallado como funciona esto? Gracias. Título: Re: [Ayuda] ¿Cuál es el problema en el código? Publicado por: eferion en 27 Abril 2015, 11:31 am Gracias, me sirvió! También encontré otra solución utilizando el puntero this. No es otra solución. En mi respuesta te puse este código: Código
El puntero "this" es un puntero implícito que está presente en todos los métodos y funciones no estáticos de una clase. Que no lo indiques explícitamente no quiere decir que no se esté usando. Es decir, el ejemplo que te puse es exactamente el mismo que este otro: Código
Ahora si bien el programa me funciona perfectamente, no termino de entenderlo bien. ¿Me podrías explicar un poco mas detallado como funciona esto? Gracias. Código
Si te fijas, en tu código inicial estás creando dos variables, de tipo "Tiempo". Estas variables son, obviamente, locales, lo que implica que se perderán cuando la ejecución abandone este constructor. Resulta que los nombres elegidos para estas variables coinciden con los de las variables miembro de la clase "Empleado", pero aún así siguen siendo variables diferentes. Un ejemplo: Código
Lo que ha sucedido en el ejemplo anterior es que hemos creado 3 variables diferentes. Las 3 se llaman igual... pero eso es como si en tu clase te encuentras con dos compañeros que se llaman Luis... si tu pegas a uno al otro no le sale un moratón en el ojo así como por arte de magia, verdad? pues eso. Cuando dos variables tienen el mismo nombre pero pertenecen a ámbitos diferentes (no puedes crear dos variables que se llamen igual dentro del mismo ámbito), el compilador pasará a usar aquella que sea más cercana al ámbito actual, es decir, la que sea "más local". Cuando se sale del ámbito de esta variable, el compilador la destruye y, si se sigue encontrando con conflictos, pasa a usar la siguiente más local. Este fue el motivo que llevó a justificar el uso de "this". Dentro de una función cualquiera, incluidos constructores, los argumentos y las variables locales son "más locales" que las variables miembro de la clase. Si resulta que una variable local se llama igual que una variable miembro verás que es imposible acceder a dicha variable miembro salvo que uses "this". ¿Por qué con this si se puede? pues porque la variable local no es visible desde dicho puntero... por algo es una variable local. Espero que con esto te haya quedado más claro el origen del problema. Un saludo. |