¿Qué es una función virtual?

Una función virtual es una función, definida en una superclase, que debe estar presente en una subclase para que esa subclase tenga una definición de clase completa. Las funciones virtuales se basan en un paradigma de programación orientado a objetos llamado herencia virtual, que se ve más comúnmente en C ++ utilizando la palabra clave "virtual". Para definir una función virtual, son necesarias dos clases, una superclase y una subclase. La superclase es donde se declara por primera vez la función y posiblemente se define. La subclase es donde se define la función, o anulada, dependiendo de si la función se definió en la superclase.

La función virtual se puede definir de una de dos maneras. Primero, se puede definir como un trozo, en el que tiene un cuerpo vacío y no hace nada. En segundo lugar, podría definirse como una función virtual pura, donde se define como nulo en el archivo de encabezado de la superclase.

Hay ventajas y desventajas para ambas metodologías. Definir una función como un trozo asegura que todas las subclasesEs una implementación de la misma, incluso si no hace nada. Sin embargo, si uno se olvida de anular la función e implementarla correctamente en una subclase, no parecerán errores o advertencias para señalar esto. La definición de una función virtual pura, por otro lado, requiere que cada subclase tenga su propia definición de la función, y aparecerán errores si este no es el caso.

Las funciones virtuales, sin embargo, están sujetas a las mismas reglas de herencia que las funciones no virtuales, por lo que las jerarquías de herencia con más de dos niveles podrían no requerir definiciones explícitas de funciones virtuales. Por ejemplo, se puede considerar una clase A que declara una función virtual, que se implementa en la subclase B. La clase B tiene una subclase propia, la Clase C de Clase C no requiere una definición explícita de la función de la Clase A, porque hereda la definición de la clase B., si es necesario, la Clase C podría anular la función de Clase B,O podría anular la función de Clase B al tiempo que la llama.

En el otro extremo, las funciones virtuales no tienen que definirse en una subclase si se declaran virtuales en esa subclase. Por ejemplo, uno puede considerar una clase A que declara una función virtual y tiene dos subclases, B y C. Además, uno podría imaginar que la clase B tiene subclases D y E, y la subclases C tiene subclases F y G.

Las clases B a G deben tener la función virtual de Clase A definida de alguna manera. Si la clase B tiene una implementación de la función de A, las clases D y E no necesitan que se reduzca. Quizás las subclases de C necesiten implementar la función de A, pero ambos hacen algo diferente, por lo que definir la función en la clase C en sí misma no sería útil. En ese caso, la función puede declararse virtual en la clase C, y una implementación no es necesaria.

Las funciones virtuales pueden ser desalentadoras de aprender, pero cuando se usan correctamente, pueden reducir la duplicación de código y hacer que el código sea mucho más fácil de entenderen general. Sin embargo, hay muchas dificultades con funciones virtuales, especialmente en relación con la herencia múltiple. En la herencia múltiple, es posible que las funciones virtuales definidas ambiguamente confirmen entre sí, por lo que deben usarse con precaución en ese contexto.

OTROS IDIOMAS