Título: ¿Duda sobre la sobreescritura de una función miembro en una clase derivada? Publicado por: theluigy13etv en 21 Julio 2013, 07:44 am Hola a todos, necesito una pequeña ayuda, resulta que conozco un poco de Java así que me animé a aprender C++ y ahora estoy practicando lo que es la herencia y el polimorfismo. Estoy que me tranqueo en la parte de la sobreescritura de métodos.
Verán, primero definí una clase base llamada Persona con dos atributos: "nombre" y "edad", además con 5 métodos públicos: "setNombre", "setEdad", "getNombre", "getEdad" y "metodo". Luego definí dos clases derivadas de la clase Persona. Las clases derivadas son Alumno y Docente. Ambas clases con sus propios métodos set y get para manipular sus propios atributos (datos miembro) . Luego, en las clases derivadas Alumno y Docente redefiní la función miembro llamada "metodo" que heredaron de la clase base Persona. Al final, en el método main, creé los objetos correspondientes a cada clase y luego hice que un puntero p de tipo de la clase base Persona ( Persona *p ) apunte a cada objeto creado para llamar a la función miembro "metodo" . Pensé que en cada caso se ejecutaría la función miembro correcta correspondiente a cada objeto pero al ver los resultados en pantalla me doy con la sorpresa de que en todos los casos se ejecuta la función miembro correspondiente a la clase base Persona. Tal vez estoy cometiendo un error y no sé como solucionarlo, espero que alguien me pueda ayudar, muchas gracias :) Código
Título: Re: ¿Duda sobre la sobreescritura de una función miembro en una clase derivada? Publicado por: amchacon en 21 Julio 2013, 11:08 am Creo que te has equivocado y has puesto la etiqueta de java (o otro lenguaje, el caso esque ese resaltado sintáctico no me suena).
Si quieres que tu función se sobreescriba en la herencia, debes hacerla "virtual" en la clase base: Código
Ahora sí debería funcionar ;) Título: Re: ¿Duda sobre la sobreescritura de una función miembro en una clase derivada? Publicado por: theluigy13etv en 21 Julio 2013, 19:18 pm Muchas gracias amchacon, ya solucioné el problema, tal y como dijiste, tuve que declarar la función de la clase base como virtual para que luego de que lo sobrescriba en las clases bases e invoque a esa función usando un puntero de la clase base, se ejecute la función correspondiente a la clase derivada. :) :)
Título: Re: ¿Duda sobre la sobreescritura de una función miembro en una clase derivada? Publicado por: theluigy13etv en 21 Julio 2013, 19:19 pm Muchas gracias amchacon, ya solucioné el problema, tal y como dijiste, tuve que declarar la función de la clase base como virtual para que luego de que lo sobrescriba en las clases derivadas e invoque a esa función usando un puntero de la clase base, se ejecute la función correspondiente a la clase derivada. :) :)
|