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:
Empleado::Empleado(long _DNI, char* _NomApe, int He, int Me, int Se, int Hs, int Ms, int Ss)
: Persona(_DNI, _NomApe),
{
HorarioEntrada = Tiempo (He, Me, Se);
HorarioSalida = Tiempo (Hs, Ms, Ss);
}
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:
Empleado::Empleado(long _DNI, char* _NomApe, int He, int Me, int Se, int Hs, int Ms, int Ss)
: Persona(_DNI, _NomApe),
{
this->HorarioEntrada = Tiempo (He, Me, Se);
this->HorarioSalida = Tiempo (Hs, Ms, Ss);
}
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.
Empleado::Empleado(long _DNI, char* _NomApe, int He, int Me, int Se, int Hs, int Ms, int Ss)
: Persona(_DNI, _NomApe)
{
Tiempo HorarioEntrada(He, Me, Se);
Tiempo HorarioSalida(Hs, Ms, Ss);
}
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:
int main( )
{
int i;
i = 0;
std::cout << "aqui vale 0: " << i << std::endl;
{
int i ;
i = 1;
std::cout << "aqui vale 1: " << i << std::endl;
{
int i;
i = 2;
std::cout << "aqui vale 2: " << i << std::endl;
}
std::cout << "aqui vuelve a valer 1: " << i << std::endl;
}
std::cout << "aqui vuelve a valer 0: " << i << std::endl;
}
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.