Cuando se tiene un método de la clase base declarada como virtual
, con el fin de anular que es necesario proporcionar una función con exactamente la misma firma en clase derivada (tipos de retorno covarianza se permite sin embargo).
Si el nombre de la función es la misma pero la firma en la clase derivada varía de una clase en la base de lo que no se overidding más, Es function Hiding, el método de clase derivada oculta el método de la clase base.
sobrecarga de funciones no está al otro lado de las clases, puede sobrecargar métodos dentro de la misma clase o funciones gratuitas, pero las clases no encontrado. Cuando intentas hacerlo a través de las clases, lo que finalmente obtienes es ocultar funciones.
Para traer los métodos de la clase base en el alcance de su clase derivada que hay que añadir una
adicional using functionName
, a su clase derivada.
EDIT:
En cuanto a la Q de cuándo utilizar virtual
durante la sobrecarga, la respuesta es:
Si tiene la intención funciones de su clase para ser anulados por polimorfismo en tiempo de ejecución debe marcarlos como virtual
, y no si no tienes la intención de hacerlo.
Buena lectura:
When to mark a function in C++ as a virtual?
Para sobrecargar una función de miembro de clase base en una clase derivada, solo necesita una declaración 'using'. – Potatoswatter
@Potatoswatter: Sí, necesita hacer eso además de solo proporcionar los métodos, en ese sentido es más que solo proporcionar versiones sobrecargadas. –
También estaba tratando de formular una respuesta, pero no podía explicar las diferencias entre hacer una función en la base virtual o no. Puede sobrecargar ambos de la misma manera en una clase derivada (con una firma diferente). Y creo que eso es parte de la pregunta del OP. –